为 Roslyn 分析器提供依赖项的正确方法是什么?
What's the correct way to deliver dependencies for Roslyn analyzers?
我们已经开始在我们的一些库中包含 Roslyn 分析器,以使我们的开发人员更容易发现这些库的功能。
为了促进这一点,我们有一个分析器使用的共享库。所以我们有共享组件,Company.Roslyn.dll
和 Company.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?
在 VS 2015 中,仅添加 analyzer.dll 是不够的。还必须添加所有参考文献。我不确定这是否在 VS2017 中有所改进。
对两个独立的分析器具有相同的依赖性通常不是问题。虽然依赖项在解决方案资源管理器树中出现两次,但 VS 只会将 DLL 加载到内存中一次。 (除非 DLL 是强类型的,并且您部署了两个不同的版本)请注意,依赖项也在 nuget 分析器包和分析器 VSIX 扩展之间共享。
我们已经开始在我们的一些库中包含 Roslyn 分析器,以使我们的开发人员更容易发现这些库的功能。
为了促进这一点,我们有一个分析器使用的共享库。所以我们有共享组件,Company.Roslyn.dll
和 Company.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?
在 VS 2015 中,仅添加 analyzer.dll 是不够的。还必须添加所有参考文献。我不确定这是否在 VS2017 中有所改进。
对两个独立的分析器具有相同的依赖性通常不是问题。虽然依赖项在解决方案资源管理器树中出现两次,但 VS 只会将 DLL 加载到内存中一次。 (除非 DLL 是强类型的,并且您部署了两个不同的版本)请注意,依赖项也在 nuget 分析器包和分析器 VSIX 扩展之间共享。