为Roslyn分析器提供依赖关系的正确方法是什么?

时间:2018-04-12 11:08:31

标签: .net nuget roslyn roslyn-code-analysis

我们已经开始在我们的一些库中包含Roslyn分析器,以使我们的开发人员更容易发现这些库的功能。

为方便起见,我们有一个分析器使用的共享库。因此,我们有共享组件Company.Roslyn.dllCompany.Collections.VisualStudio.dll包含分析器,并且依赖于此共享组件。当我们为Company.Collections创建我们的nuget时,我们包括依赖项,如下所示:

<file src="Build\Company.Collections.VisualStudio.dll" target="analyzers\dotnet\cs" />
<file src="Build\Company.Roslyn.dll" target="analyzers\dotnet\cs" />

安装程序运行时,它会将两个dll作为分析程序添加到项目文件中。

现在我们已经创建了第二个分析器dll,它依赖于相同的Company.Roslyn.dll,我们在项目的分析器列表中最终得到了2个这样的实例。

我的第一个问题是,这是正确的吗? Company.Roslyn.dll实际上并不包含任何分析器,因此它应该作为分析器添加吗?如果我不这样做,那么在某些情况下,我会收到一个警告,说依赖项应该作为分析器添加......

我的第二个更普遍的问题是我们应该如何管理分析器的依赖关系,我的感觉是它们应该只是部署在文件夹中,而不是分析器,所以它只是默认的install.ps1脚本具有问题,这应该只添加实际的分析器dll?

1 个答案:

答案 0 :(得分:2)

在VS 2015中,仅添加analyzer.dll是不够的。所有参考文献也必须加入。我不确定VS2017是否有所改进。

对两个独立的分析仪具有相同的依赖性通常不是问题。虽然依赖项在解决方案资源管理器树中显示两次,但VS只会将DLL加载到内存中一次。 (除非DLL是强类型的,并且您部署了两个不同的版本)请注意,nuget分析器包和分析器VSIX扩展之间也共享依赖关系。