在我正在处理的一个作为Nuget包部署的库上,我希望包含Microsoft.VisualStudio.Threading,这样我就可以使用AsyncEventHandlers.

然而,该包依赖于Microsoft.VisualStudio.Threading.Analyzers,其中包含静态代码分析器.它们产生了许多警告,其中一些涉及并不被普遍接受的风格规则.

我不介意它们出现在我的库项目中,我发现它们很有帮助,但是分析器会感染引用我的包的所有项目.在我的一个项目中,有500多个警告告诉我要在所有异步方法的末尾添加异步.

I was able to find some related issues: Some projects' dependencies contain unexplained code analyzers

...但没有直接命中.有没有办法在我的包中处理这个问题,使这些分析器对使用我的Nuget包的下游项目关闭,而不需要最终开发人员采取特殊操作?

推荐答案

通常,分析器不应该作为依赖项包括在内.这正是链接的问题试图告诉你的.在构建中包含分析器的地方,通常使用额外的<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项设置,这应该是可行的.

Select <PrivateAssets>all</PrivateAssets>告诉编译器不要包括下游代码的依赖项,而 Select <IncludeAssets>则告诉编译器对给定任务使用依赖项.

Csharp相关问答推荐

在Microsoft XNA框架(MonoGame)中旋转相机

更改对象的旋转方向

Monty Hall游戏节目模拟给我50/50的结果

. NET 8使用COM向VB6公开

"virtual"修饰符对接口成员有什么影响?

SignalR客户端不会打印队列位置'

当我使用NET6作为目标框架时,为什么DotNet使用NET8作为MS包?

实体框架核心上是否支持使用NPGSQL的字符串聚合?

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

从应用程序图API调用访问所有者字段

如何测量在使用UTF8而不是C#中的UTF16编码字符串时内存使用量的增长

附加标题不起作用,而添加则起作用

如何在C#中将方法/线程启动传递给基本构造函数

C# CompareTo()和Compare()可以返回除-1和1以外的整数吗?

如何管理Azure认证客户端响应和证书 fingerprint

将操作从编辑页重定向到带参数的索引页

是否可以在Entity Framework Core中使用只读 struct 作为拥有实体?

C#命名管道-编码错误?

流畅的验证--如何为属性重用规则?

SqlException:无法打开数据库.升级到Dotnet 8后-数据库兼容性版本-非EFCore兼容性级别