使用.NET编译器平台SDK模板时(
https://visualstudiogallery.msdn.microsoft.com/849f3ab1-05cf-4682-b4af-ef995e2aa1a5)
使用Code Fix创建一个Roslyn诊断程序,我得到一个NuGet包和一个VSIX – 如自述文件所述:
“构建此项目将生成一个分析器.dll,以及您可能希望打包该分析器的以下两种方式:
>一个NuGet包(.nupkg文件),它将您的程序集添加为参与构建的项目本地分析器.
>一个VSIX扩展(.vsix文件),它将您的分析器应用于所有项目,并且只在IDE中工作.“
现在出现以下情况:如果两者都已安装 – 作为项目的一部分的NuGet(例如,该项目的公司策略),开发人员本地安装的VSIX部分(例如,她也获得了其他项目的分析器).截至今天,建议将针对上述情况出现两次.
我可以告诉VS2015两者(NuGet / VSIX)实际上是相同的(它只运行一次)?或者是一种优先用于部署的方法(例如NuGet)而另一种方法(VSIX)仅用于调试诊断(比NuGet更方便)?对此有一些官方指导吗?
(注意:我在NR6Pack上工作)
解决方法
我们最近根据分析仪名称进行了统一更改.因此,如果VSIX分析器和Project分析器都具有相同的AssemblyName,它将只运行一次,并且只会在错误列表中报告一次问题.此更改应显示在VS2015的下一次更新中(尽管不幸的是它没有进入最近发布的VS 2015 CTP5).
关于NuGet vs VSIX作为部署机制的选择:
>通过NuGet进行部署并将分析器附加到项目意味着分析仪随项目一起移动到源控制,因此很容易为团队应用相同的规则.它还意味着命令行构建报告分析器报告的问题.
>作为VSIX进行部署意味着VS中的每个项目都不会通过命令行构建生成.
我想象的方式是大多数规则应该通过NuGet部署并在团队级别强制执行,但个人偏好的规则应该通过VSIX来部署.