如何处理.NET Core项目中疑似过时的外部NuGet依赖包问题?
问题解答
关于依赖过时的疑问
不是Azure.Storage.Blobs自身引用了过时依赖。Azure.Storage.Blobs 12.14.1对System.Text.Json的依赖要求是>=4.7.2,而System.Text.Json 4.7.2对System.Text.Encodings.Web的依赖要求是>=4.7.1。NuGet默认会拉取满足最低要求的版本(也就是4.7.1),这才导致安全扫描工具标记漏洞——并非Azure包本身依赖过时版本,而是依赖解析的默认行为选择了最低兼容版。
无需直接引用嵌套包的解决方法
你可以通过NuGet的版本覆盖机制,强制使用修复了CVE的System.Text.Encodings.Web版本,无需在代码中引用该包的API:
1. 单个项目修复
在目标项目的.csproj文件中添加以下配置,指定安全版本并设置不传递依赖:
<ItemGroup> <!-- 替换为修复CVE的最新稳定版本,比如4.7.2或更高 --> <PackageReference Include="System.Text.Encodings.Web" Version="4.7.2" PrivateAssets="All" /> </ItemGroup>
PrivateAssets="All"会确保这个包不会被作为依赖传递给其他引用当前项目的包,也不会暴露给你的代码,仅用于强制NuGet使用指定版本。
2. 全局解决方案级修复
如果解决方案中有多个项目受影响,在解决方案根目录创建Directory.Packages.props文件,内容如下:
<Project> <ItemGroup> <!-- 全局指定安全版本 --> <PackageVersion Include="System.Text.Encodings.Web" Version="4.7.2" /> </ItemGroup> </Project>
所有项目在还原依赖时,都会自动使用这个指定的版本,无需逐个修改项目文件。
验证修复效果
执行以下命令查看项目的完整依赖树,确认System.Text.Encodings.Web的版本已更新:
dotnet list package --include-transitive
内容的提问来源于stack exchange,提问作者EvilDr
相关产品推荐
相关产品推荐

