You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Update-Package --reinstall后为何新增NuGet包?

为什么使用Update-Package --reinstall后新增了很多NuGet包?

我有一个包含若干NuGet包的解决方案,这些包分别面向不同的.NET框架:部分目标为net451,部分为net452,还有部分为net461。我的项目基于net461框架,因此使用命令Update-Package --reinstall重装适配net461的包,操作成功后却发现新增了不少之前没有的包,请问原因是什么?

更新前的包列表:

<package id="EnterpriseLibrary.Common" version="6.0.1304.0" targetFramework="net451" /> 
<package id="EnterpriseLibrary.TransientFaultHandling" version="6.0.1304.0" targetFramework="net451" /> 
<package id="EnterpriseLibrary.TransientFaultHandling.Caching" version="6.0.1304.0" targetFramework="net451" /> 
<package id="EnterpriseLibrary.TransientFaultHandling.Configuration" version="6.0.1304.0" targetFramework="net451" /> 
<package id="EnterpriseLibrary.TransientFaultHandling.Data" version="6.0.1304.1" targetFramework="net451" /> 
<package id="EnterpriseLibrary.TransientFaultHandling.ServiceBus" version="6.0.1304.0" targetFramework="net451" /> 
<package id="EnterpriseLibrary.TransientFaultHandling.WindowsAzure.Storage" version="6.0.1304.0" targetFramework="net451" /> 
<package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net451" /> 
<package id="Microsoft.Data.Edm" version="5.8.2" targetFramework="net452" /> 
<package id="Microsoft.Data.OData" version="5.8.2" targetFramework="net452" /> 
<package id="Microsoft.Data.Services.Client" version="5.8.2" targetFramework="net452" /> 
<package id="Microsoft.Extensions.DependencyInjection" version="2.0.0" targetFramework="net461" /> 
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.0.0" targetFramework="net461" /> 
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net452" /> 
<package id="NETStandard.Library" version="1.6.1" targetFramework="net452" /> 
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net452" /> 
<package id="System.Collections" version="4.3.0" targetFramework="net452" /> 
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net452" /> 
<package id="System.ComponentModel" version="4.3.0" targetFramework="net452" /> 
<package id="System.ComponentModel.EventBasedAsync" version="4.0.11" targetFramework="net452" /> 
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net452" /> 
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net452" /> 
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net452" /> 
<package id="System.Dynamic.Runtime" version="4.0.0" targetFramework="net452" /> 
<package id="System.Globalization" version="4.3.0" targetFramework="net452" /> 
<package id="System.IO" version="4.3.0" targetFramework="net452" /> 
<package id="System.IO.Compression" version="4.3.0" targetFramework="net452" /> 
<package id="System.Linq" version="4.3.0" targetFramework="net452" /> 
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net452" /> 
<package id="System.Linq.Queryable" version="4.0.0" targetFramework="net452" /> 
<package id="System.Net.Http" version="4.3.0" targetFramework="net452" /> 
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net452" /> 
<package id="System.Net.Requests" version="4.0.11" targetFramework="net452" /> 
<package id="System.ObjectModel" version="4.3.0" targetFramework="net452" /> 
<package id="System.Reflection" version="4.3.0" targetFramework="net452" /> 
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net452" /> 
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net452" /> 
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net452" /> 
<package id="System.Runtime" version="4.3.0" targetFramework="net452" /> 
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net452" /> 
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net452" /> 
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net452" /> 
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net452" /> 
<package id="System.Spatial" version="5.8.2" targetFramework="net452" /> 
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net452" /> 
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net452" /> 
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net452" /> 
<package id="System.Threading" version="4.3.0" targetFramework="net452" />

原因拆解

这个问题我之前帮同事排查过,核心是Update-Package --reinstall的工作机制,加上不同.NET框架下NuGet依赖解析的差异导致的,具体来说:

  • --reinstall是强制适配当前项目框架:这个命令不是简单的重复安装原来的包,而是会把所有包替换成**完全适配你项目当前目标框架(net461)**的版本。你原来的包混合了net451、net452的版本,这些包在net461环境下的依赖清单和旧框架完全不同,NuGet会自动补上所有net461环境下必需的依赖包,这就是新增包的主要来源。

  • 依赖树被完全重新计算:之前你的packages.config是混合框架的状态,NuGet当时可能做了依赖优化(比如某些组件在net451/452里是.NET框架自带的,不需要单独安装)。但执行重装命令时,NuGet会彻底清空之前的依赖缓存,严格按照net461的环境重新计算整个依赖链,哪怕有些包在旧框架下不需要,在net461的依赖逻辑里就必须装上。

  • 针对你列表里的具体情况:比如原来的EnterpriseLibrary系列是net451版本,重装成适配net461的版本后,它的依赖项比旧版本多;还有那些System.*的包,原来跟着NETStandard.Library适配net452,现在适配net461时,NuGet会拉取更贴合net461的NETStandard兼容依赖,连带新增了一些之前没出现的系统类库包。


内容的提问来源于stack exchange,提问作者Akshay Bheda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:45