NuGet持续还原程序集绑定重定向至错误版本,引发运行时错误
解决NuGet操作后程序集绑定重定向被强制改为旧版本的问题
我太懂这种被NuGet自动重定向搞崩的痛苦了——显然是它的默认版本统一逻辑在作祟:因为解决方案里存在一个引用PackageA v1的项目,NuGet就默认把全局重定向指向了更低的版本,完全忽略了15个项目都用v2的事实。下面给你几个靠谱的解决办法:
方法1:逐个关闭v2项目的自动绑定重定向
针对那15个用PackageA v2的项目,我们直接切断NuGet的自动修改权限:
- 右键目标项目 → 打开属性面板
- 切换到应用程序标签,点击底部的程序集信息按钮
- 在弹出的窗口里,取消勾选自动生成绑定重定向选项
- 最后手动把app.config里的重定向改回v2版本:
<dependentAssembly> <assemblyIdentity name="PackageA" publicKeyToken="abc123" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.9.9.9" newVersion="2.0.0.0" /> <!-- 替换成你的实际v2版本号 --> </dependentAssembly>
方法2:解决方案级配置强制指定优先版本
不想逐个改项目的话,直接在解决方案根目录加个NuGet配置文件,统一指定PackageA的优先版本:
- 在解决方案根目录创建(或编辑)
NuGet.Config文件 - 写入以下内容,明确告诉NuGet优先用v2:
这个配置会覆盖NuGet的默认版本选择逻辑,以后再执行NuGet操作时,就会默认把重定向指向v2了。<?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="bindingRedirects:PackageA" value="2.0.0.0" /> <!-- 替换为你的v2版本号 --> </config> </configuration>
方法3:给重定向加锁,禁止被修改
如果还想保留自动重定向功能,但不想这条规则被篡改,可以给绑定重定向加个applyPolicy="false"属性:
<dependentAssembly> <assemblyIdentity name="PackageA" publicKeyToken="abc123" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.9.9.9" newVersion="2.0.0.0" applyPolicy="false" /> </dependentAssembly>
这个属性会直接阻止NuGet和MSBuild修改这条重定向规则,确保它始终指向你想要的v2版本。
额外提醒
- 记得确认那个用v1的项目,它的绑定重定向是单独指向v1的,不要影响其他项目
- 每次做完NuGet操作(安装、更新包)后,最好抽查一两个项目的app.config,确保重定向没被偷偷改回去
- 如果是.NET Framework项目,还可以检查项目文件(.csproj)里的
<AutoGenerateBindingRedirects>配置,必要时改成false彻底关闭自动生成
内容的提问来源于stack exchange,提问作者UnknownBeef
相关产品推荐
相关产品推荐

