Необходимо собрать Roslyn Analyzer, ориентированный на .NET Standard\Core, а не на .NET Portable.

Я использую шаблоны Roslyn SDK по умолчанию, поставляемые с Visual Studio 2017. Проекты, которые они создают, нацелены на .NET Framework Portable. Я предполагаю, что проекты расширения Roslyn могут быть нацелены на .NET Standard\Core вместо Portable, и я ищу шаблоны или образец проекта Roslyn Analyzer\Refactoring, который я мог бы изучить.


person Ivan Koshelev    schedule 27.08.2017    source источник
comment
В чем ваша проблема, либо запустите новый проект и обратитесь к анализаторам, а затем вызовите его из своего vsix, либо измените файл CSProj и замените переносимые библиотеки   -  person johnny 5    schedule 28.08.2017
comment
Я пробовал это, но это не так прямолинейно. Вы знаете пример проекта, на который я мог бы взглянуть, где это было сделано успешно?   -  person Ivan Koshelev    schedule 29.08.2017
comment
Единственный известный мне проект, над которым я успешно работал, — это вот этот, и я не думаю, что моя компания позволила бы поделиться им. но я последовал этому ответу   -  person johnny 5    schedule 29.08.2017
comment
Вы пытались 1) создать проект VSIX, 2) добавить элемент и выбрать Analyzer. Вам придется исправить некоторые ссылки вручную с помощью диспетчера пакетов nuget. Я вроде как помню, что строил это так: github.com/smourier/EnumCaseGenerator (у меня нет Анализатор, но CodeRefactoring, но идея та же)   -  person Simon Mourier    schedule 29.08.2017


Ответы (2)


Пример конвертированного анализатора из шаблона анализатора по умолчанию доступен здесь. Существует оригинальный анализатор для сравнения вместе с TestAnalyzerStandard, ориентированным на стандарт .NET.

Шаги, чтобы заставить его работать:

  • Создать новую библиотеку .NET Standard
  • Библиотека должна быть нацелена на .NET Standard 1.3. Это необходимо, если вы хотите запустить анализатор как расширение внутри VS (расширения нацелены на .NET 4.6). Сопоставление стандартных версий и версий полной платформы доступно здесь. Также, если вы попытаетесь установить более раннюю версию, чем 1.3, вы не сможете включить необходимые пакеты анализатора.
  • Добавьте пакет nuget для Microsoft.Composition последней версии. Это нужно Microsoft.CodeAnalysis.CSharp.Workspaces. Если вы попытаетесь сначала добавить рабочие области, вы получите сообщение об ошибке, что указанный пакет композиции несовместим.
  • Добавьте пакет nuget для Microsoft.CodeAnalysis.CSharp (я использую последнюю версию 1.*)
  • Добавьте пакет nuget для Microsoft.CodeAnalysis.Csharp.Workspaces (версия должна совпадать с версией Microsoft.CodeAnalysis.CSharp).
  • На этом этапе вы можете скопировать код из переносимого проекта и собрать его. Ошибок быть не должно (возможно, вам придется закрыть и снова открыть решение, если VS все еще отображает красные волнистые линии).
  • Чтобы расширение VS заработало, просто откройте source.extension.vsixmanifest, перейдите на вкладку ресурсов и измените ссылку на стандартную библиотеку .NET.
  • Чтобы создать пакет .nuget, просто выполните nuget pack Diagnostic.nuspec .. Diagnostic.nuspec действителен для Nuget 2.x. Если вы используете nuget через консоль управления пакетами в VS 2017, вам придется изменить <file src="*.dll" ..." на <file src="bin\*\netstandard1.3\*.dll" ....

Эти шаги являются результатом моих экспериментов с анализаторами (ранее я играл с созданием DLL, ориентированной на полный фреймворк, а не на портативную библиотеку). Они никоим образом не являются официальными.

person nejcs    schedule 30.08.2017
comment
Я скачал указанный проект, удалил портативную версию анализатора, оставив только базовую версию, и попытался ее собрать. Пока VSIX не работает, а nugget не включает dll в пакет. - person Ivan Koshelev; 03.09.2017
comment
Я тестировал пакеты vsix и nuget в Visual Studio 2017 (15.2), и оба они работали нормально. Я удалил ссылки из портативного анализатора и обновил файл .csproj, указав на Diagnostic.nuspec для упаковки. Теперь вы можете собрать пакет nuget непосредственно из Visual Studio, щелкнув правой кнопкой мыши TestAnalyzerStandard -> Pack. Пакет Nuget будет находиться в папке Debug (или Release). Я также включил встроенное расширение vsix и пакет nuget в папку TestAnalyzerStandard\Publish, чтобы вы могли видеть, что производится на моей машине. - person nejcs; 03.09.2017
comment
Надо будет позже проверить (извините, сейчас очень загружен). Я присудил награду. - person Ivan Koshelev; 03.09.2017
comment
VSIX, содержащий рефакторинг, ориентированный на стандарт .NET 1.3, работает в Visual Studio 2017, но не работает с 2015. Знаете ли вы о каких-либо ограничениях совместимости в отношении версий VS? - person Ivan Koshelev; 04.10.2017