需要构建针对.NET Standard/Core而不是.NET Portable的Roslyn分析器

6

我正在使用Visual Studio 2017附带的默认Roslyn SDK模板。它们创建的项目目标为.NET Framework Portable。我假设Roslyn可扩展性项目可以将目标指向.NET Standard \ Core而不是Portable,并且我正在寻找Roslyn分析器\重构项目的模板或示例,以供学习参考。


你在这里遇到了什么问题?要么开始一个新项目并引用分析器,然后从你的vsix中调用它,要么修改CSProj文件并替换便携式库。 - johnny 5
1
我已经尝试过了,但这并不是那么简单明了。你知道有没有一个成功实现这个的示例项目,我可以参考一下吗? - Ivan Koshelev
我知道的唯一一个我成功运行了的项目是这个,但我不认为我的公司会允许分享。不过我按照这个答案操作了一下。 - johnny 5
你尝试过以下步骤吗?1)创建一个VSIX项目,2)执行“添加项”并选择分析器。您需要使用NuGet包管理器手动修复一些引用。我有点记得我是按照这个链接的方式构建的:https://github.com/smourier/EnumCaseGenerator(我没有分析器,但是有一个CodeRefactoring,但是思路是相同的)。 - Simon Mourier
2个回答

10

默认模板转换分析器的示例可在此处获得。其中包括用于比较的原始分析器以及针对.NET标准的TestAnalyzerStandard

使其工作的步骤如下:

  • 创建新的.NET标准库。
  • 该库必须针对.NET标准1.3进行目标设置。如果你希望将分析器作为VS扩展运行(扩展程序针对.NET 4.6),则需要这样做。标准版本和完整框架版本之间的映射位于此处。另外,如果你试图针对低于1.3的版本进行目标设置,则无法包含所需的分析器包。
  • 添加最新版本的Microsoft.Compositionnuget包。这是Microsoft.CodeAnalysis.CSharp.Workspaces所需的。如果您先添加了工作空间,则会出现引用的组合包不兼容的错误。
  • 添加Microsoft.CodeAnalysis.CSharpnuget包(我正在使用最新的1.*版本)。
  • 添加Microsoft.CodeAnalysis.Csharp.Workspacesnuget包(版本应与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)。它们并不是任何意义上的官方


我已经下载了所引用的项目,删除了便携式分析器版本,只留下核心版本并尝试构建它。到目前为止,VSIX不起作用,NuGet也没有在包中包含dll文件。 - Ivan Koshelev
我在Visual Studio 2017(15.2)中测试了vsix和nuget包,它们都正常工作。我从可移植分析器中删除了引用,并更新了.csproj文件以指向Diagnostic.nuspec进行打包。现在,您可以通过右键单击“TestAnalyzerStandard”->“Pack”直接从Visual Studio构建nuget包。Nuget包将出现在Debug(或Release)文件夹中。我还在“TestAnalyzerStandard \ Publish”文件夹中包含了构建的vsix扩展和nuget包,以便您可以看到我的机器上产生了什么。 - nejcs
我稍后会检查(抱歉,现在很忙)。我已经授予了赏金。 - Ivan Koshelev
包含重构目标 .NET standard 1.3 的 VSIX 可以在 Visual Studio 2017 中使用,但无法在 2015 中使用。您是否了解有关 Visual Studio 版本的任何兼容性限制? - Ivan Koshelev

5

我开始着手一个新的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,所以这是可以的)

更新 Roslyn的版本控制现在有点复杂,即如果您想要在Visual Studio 2015中使用您的扩展,您将不得不使用PCL库。有关更多信息,请参阅Roslyn文章的结尾部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接