需要构建针对 .NET Standard \ Core 而不是 .NET Portable 的 Roslyn Analyzer

Need to build Roslyn Analyzer targeting .NET Standard \ Core rather than .NET Portable

我使用的是 Visual Studio 2017 附带的默认 Roslyn SDK 模板。他们创建的项目以 .NET Framework Portable 为目标。我假设 Roslyn 可扩展性项目可以以 .NET Standard\Core 而不是 Portable 为目标,我正在寻找我可以研究的模板或 Roslyn Analyzer\Refactoring 项目示例。

从默认分析器模板转换的分析器示例可用 here。有用于比较的原始分析器以及针对 .NET 标准的 TestAnalyzerStandard

使其工作的步骤:

  • 创建新的 .NET Standard 库
  • 库必须以 .NET Standard 1.3 为目标。如果您希望 运行 分析器作为 VS 内的扩展(扩展目标 .NET 4.6),则这是必需的。标准版本和完整框架版本之间的映射可用 here。此外,如果您尝试以低于 1.3 的版本为目标,您将无法包含所需的分析器包。
  • Microsoft.Composition 最新版本添加 nuget 包。这是 Microsoft.CodeAnalysis.CSharp.Workspaces 所需要的。如果您首先尝试添加工作区,则会出现引用的组合包不兼容的错误。
  • Microsoft.CodeAnalysis.CSharp 添加 nuget 包(我使用的是最新的 1.* 版本)
  • Microsoft.CodeAnalysis.Csharp.Workspaces 添加 nuget 包(版本应与 Microsoft.CodeAnalysis.CSharp 的版本匹配)。
  • 此时您可以从可移植项目中复制代码并构建它。应该没有错误(如果 VS 仍然显示红色波浪线,您可能必须关闭并重新打开解决方案)。
  • 要使 VS 扩展正常工作,只需打开 source.extension.vsixmanifest,转到资产选项卡并更改对 .NET 标准库的引用
  • 要创建 .nuget 包,只需执行 nuget pack Diagnostic.nuspec .Diagnostic.nuspec 对 Nuget 2.x 有效。如果您在 VS 2017 中通过包管理控制台使用 nuget,则必须将 <file src="*.dll" ..." 更改为 <file src="bin\*\netstandard1.3\*.dll" ...

这些步骤是我使用分析器进行实验的结果(我之前尝试创建针对完整框架而不是可移植库的 DLL)。他们绝不是官方.

我开始着手一个新的 Roslyn 项目,一个一个地构建东西,而不是使用模板。 https://github.com/IKoshelev/Roslyn.AutoLogging/commit/1f88e3e49141e0fa425c51fdcb3457a7c3d6dcaa

我成功实现了以下定位:

重构项目 - .NET Standard 1.3(此 .dll 将分发,版本保持最低)

单元测试项目 - .NET Core 2.0

VSIX 项目 - .NET Framework 4.6(我相信,只有完整的 Visual Studio 支持 VSIX,所以没关系)

Update Roslyn 的版本控制现在有点复杂,即如果你想在 Visual Studio 2015 中使用你的扩展,你将不得不使用 PCL 图书馆。更多信息在本文末尾 article on Roslyn