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

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:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <config>
        <add key="bindingRedirects:PackageA" value="2.0.0.0" /> <!-- 替换为你的v2版本号 -->
      </config>
    </configuration>
    
    这个配置会覆盖NuGet的默认版本选择逻辑,以后再执行NuGet操作时,就会默认把重定向指向v2了。

方法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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:15:43