Я использую шаблоны Roslyn SDK по умолчанию, поставляемые с Visual Studio 2017. Проекты, которые они создают, нацелены на .NET Framework Portable. Я предполагаю, что проекты расширения Roslyn могут быть нацелены на .NET Standard\Core вместо Portable, и я ищу шаблоны или образец проекта Roslyn Analyzer\Refactoring, который я мог бы изучить.
Необходимо собрать Roslyn Analyzer, ориентированный на .NET Standard\Core, а не на .NET Portable.
Ответы (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, ориентированной на полный фреймворк, а не на портативную библиотеку). Они никоим образом не являются официальными.
.csproj
, указав на Diagnostic.nuspec
для упаковки. Теперь вы можете собрать пакет nuget непосредственно из Visual Studio, щелкнув правой кнопкой мыши TestAnalyzerStandard
-> Pack
. Пакет Nuget будет находиться в папке Debug (или Release). Я также включил встроенное расширение vsix и пакет nuget в папку TestAnalyzerStandard\Publish
, чтобы вы могли видеть, что производится на моей машине.
- person nejcs; 03.09.2017
Я начал работать над новым проектом Roslyn и создавал вещи одну за другой вместо использования шаблона. https://github.com/IKoshelev/Roslyn.AutoLogging/commit/1f88e3a3e57cad5d1f425c >
Мне удалось установить следующий таргетинг:
Проект рефакторинга — .NET Standard 1.3 (эта .dll будет распространяться, минимальная версия)
Проект UnitTests — .NET Core 2.0
Проект VSIX — .NET Framework 4.6 (я полагаю, что только полная версия Visual Studio поддерживает VSIX, так что все в порядке)
Обновление Управление версиями Roslyn сейчас немного сложнее, т. е. если вы хотите использовать свои расширения с Visual Studio 2015, вам придется использовать библиотеки PCL. Дополнительные сведения см. в конце этой статьи статья о Рослин