NuGet 警告 NU1901、NU1902、NU1903、NU1904

警告 NU1902:包“NuGet.Protocol”5.11.2 具有已知中等严重性漏洞 https://github.com/advisories/GHSA-g3q9-xf95-8hp5

此警告代码会根据已知的漏洞严重性级别进行更改:

警告代码 Severity
NU1901 low
NU1902 中等
NU1903 high
NU1904 严重

问题

为项目还原的包存在已知漏洞。

有关详细信息,请参阅有关包审计的文档

解决方案

当项目使用具有已知漏洞的包时,请参阅博客文章,其中详细介绍了建议的操作以及可提供帮助的工具。

升级到较新版本的包可能会解决该警告。 如果项目未直接引用包(其为可传递包),则可使用 dotnet nuget why 了解导致哪个包将自身包含在项目之中。 可检查漏洞公告提供的 URL,以查看包的已修复版本,或是检查已配置的包源以查看包的可用版本。 Visual Studio 的包管理器 UI 可以显示哪些包版本受到影响,哪些版本没有已知的漏洞。

如果这些警告因你使用的是 TreatWarningsAsErrors 而导致还原失败,则可以添加 <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors> 以便这些代码始终为警告。

如果不希望收到比你熟悉的严重性级别更低的漏洞的相关通知,则可编辑项目文件并添加 MSBuild 属性 NuGetAuditLevel,并将值设为 lowmoderatehighcritical。 例如,<NuGetAuditLevel>high</NuGetAuditLevel>

若要禁止显示特定公告,请添加 MSBuild NuGetAuditSuppress 项。 例如,<NuGetAuditSuppress Include="https://github.com/advisories/GHSA-g3q9-xf95-8hp5" />NuGetAuditSuppress 可用于使用 PackageReference 的项目,从 VS 17.11 和 .NET 8.0.400 SDK 开始;对于使用 packages.config 的项目,从 VS 17.12 开始可用。

如果不希望 NuGet 在还原期间检查具有已知漏洞的包,请在项目文件或 Directory.Build.props 文件<PropertyGroup> 中添加 <NuGetAudit>false</NuGetAudit>。 如果要在开发人员计算机上运行 NuGet Audit,但需要在 CI 管道上禁用它,则可以利用 MSBuild 导入环境变量,然后在管道定义中创建 NuGetAudit 环境变量,将其设置为 false

在 NuGet 6.12(Visual Studio/MSBuild 17.12 和 .NET 9.0.100 SDK)中,NuGet 更改了默认值 NuGetAuditModeall这意味着报告具有已知漏洞的可传递包。 可以将该值显式设置为 direct 恢复为 .NET 8 的默认值。 或者, 可以将该属性 SdkAnalysisLevel 设置为 8.0.400 暂时禁用 SDK 较新版本中引入的所有新警告和错误。 具体来说,在这种情况下,默认值 NuGetAuditMode 将更改回 direct