.net - 为 Roslyn 分析器提供依赖项的正确方法是什么?

标签 .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?

最佳答案

在 VS 2015 中,仅添加analyzer.dll 是不够的。还必须添加所有引用。我不确定这是否在 VS2017 中有所改进。

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

关于.net - 为 Roslyn 分析器提供依赖项的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49794978/

相关文章:

.net - "There was no endpoint listening at..."

c# - 在 Entity Framework Core 中强制不区分大小写的 String.Contains

nuGet 包 - 无法解析远程名称 : 'az320820.vo.msecnd.net' /The remote server returned an error: (502) Bad Gateway

c# - 代码分析和 SupressMessage - 是否应该用 #if DEBUG 包装属性

c# - Roslyn 质疑 SyntaxTree 的构建

c# - 当类的任何属性发生变化时调用 setter

.net - .NET 程序集文件附带的 XML 文件是什么?

nuget - 如何让 NuGet 安装/更新packages.config 中的所有包?

visual-studio-2010 - 从解决方案中删除 nuget 包恢复

c# - 为什么 Roslyn 中有异步状态机类(而不是结构)?