“dotnet restore”审核可传递包

用于dotnet restore还原项目的依赖项的命令现在默认在项目面向 .NET 10 或更高版本时为可传递包生成安全漏洞警告。

以前的行为

NuGetAudit 是在 .NET 8 中引入的,用于发出具有已知安全漏洞的包的警告。 默认情况下,只审核了直接包引用,但是,可以更改 NuGetAuditMode 属性以包括所有包。

在 .NET 9 预览版 6 中,NuGetAuditMode 的默认值已更改为 all 所有项目,此更改在 .NET 9.0.101 SDK 中还原回 direct

新行为

当项目面向 .NET 10 或更高版本时,如果尚未显式设置,NuGetAuditMode 默认情况下为 all。 此设置意味着具有已知漏洞的 可传递包 (项目直接引用的包的依赖项)现在会导致报告警告。 如果项目将警告视为错误,则此行为可能会导致还原失败。

如果项目面向 .NET 9 或更低版本,则保留direct默认值NuGetAuditMode

引入的版本

.NET 10 预览版 3

破坏性变更的类型

此更改是 行为更改

更改原因

具有已知漏洞的包可能会导致你的应用被利用,即使你的项目没有直接引用或直接使用易受攻击的包。

  • 若要防止将审核警告视为错误,即使使用 <TreatWarningsAsErrors>,也可以使用 <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904;$(WarningsNotAsErrors)</WarningsNotAsErrors>

  • 尝试使用像 dotnet nuget why 这样的工具查找导致包含已知漏洞的可传递包的顶级包,并尝试升级它以查看可传递漏洞是否消失。 如果没有,请通过为可传递包添加 PackageReference 将其升级为顶级包,并将其升级到较新版本。

  • 如果要抑制特定的建议,可以将<NuGetAuditSuppress Include="url" />项目添加到项目文件中,其中url是NuGet警告消息中报告的URL。

    <ItemGroup>
        <NuGetAuditSuppress Include="url" />
    </ItemGroup>
    
  • 如果您只想收到有关具有已知漏洞的直接包引用的警告,可以在项目文件中将<NuGetAuditMode>设置为direct

    <PropertyGroup>
      <NuGetAuditMode>direct</NuGetAuditMode>
    </PropertyGroup>
    

另请参阅