Visual Studio 如何引用包含静态代码分析器依赖项的nuget包,而不将这些分析器引入到下游项目中?

jhkqcmku  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(167)

在我正在开发的库中,它被部署为nuget包,我希望包含Microsoft.VisualStudio.Threading,这样我就可以使用AsyncEventHandlers
但是,这个包依赖于Microsoft.VisualStudio.Threading.AnalyzersMicrosoft.VisualStudio.Threading.Analyzers包含静态代码分析器,它们会产生很多警告,其中一些涉及到没有被普遍接受的样式规则。
我不介意在我的库项目中使用它们,我发现它们很有帮助,但是分析器会感染所有引用我的包的项目。在我的一个项目中,有500多个警告告诉我在所有异步方法的末尾添加异步。
我能够找到一些相关的问题:Some projects' dependencies contain unexplained code analyzers
......但是没有直接命中。是否有一种方法可以在我的包中处理这个问题,在使用我的nuget包的下游项目中关闭这些分析器,而最终开发人员不必采取特殊的操作?

woobm2wo

woobm2wo1#

通常情况下,分析器不应该作为依赖项被包含进来,这正是链接问题试图告诉你的。在构建中包含分析器的地方,通常使用额外的<PrivateAssets><IncludeAssets>指令,如下所示:

<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="1.0.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>

不幸的是,如果你间接引用分析器包(所以当你引用Microsoft.VisualStudio.Threading而不是分析器包时),我不确定这是否有效,但是根据这些设置的documentation,这应该有效。
<PrivateAssets>all</PrivateAssets>告诉编译器不要包含下游代码的依赖项,而<IncludeAssets>选择告诉编译器对给定任务使用依赖项。

相关问题