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

ASP.NET站点Newtonsoft.Json多版本冲突问题求助

我来帮你拆解问题并一步步解决这个程序集加载冲突。核心问题在于你的插件依赖的是9.0.0.0版本,但实际使用的Newtonsoft.Json DLL程序集版本是9.0.1.19813(注意文件版本和程序集版本是两个不同的概念,CLR加载时只认程序集版本),再加上配置上的小疏漏导致加载失败。

第一步:确认9.0.x版本DLL的真实程序集版本

首先要区分文件版本(你在属性里看到的9.0.1.19813)和程序集版本(嵌入在DLL清单里的版本,CLR加载时以此为准),这两个版本可能不一致。

怎么查看程序集版本:

  • 右键你放在dlls\9.0.0.0里的Newtonsoft.Json.dll → 属性 → 详细信息标签 → 找到程序集版本字段。
  • 或者用ildasm.exe(.NET SDK自带工具,路径一般在C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools下)打开该DLL,双击MANIFEST节点,找到类似这样的代码:
    .assembly extern Newtonsoft.Json
    {
      .publickeytoken = (30 AD 4FE 6B 2A 6A EE ED )
      .ver 9:0:1:0
    }
    
    其中.ver后面的9:0:1:0就是程序集版本。

第二步:修改web.config配置

根据你查到的程序集版本,调整web.config,结合绑定重定向(把插件期望的版本映射到实际DLL版本)和codeBase(告诉CLR去哪找对应版本的DLL)来解决问题。

场景A:9.0.x版本DLL的程序集版本是9.0.1.0

这是最常见的情况(文件版本和程序集版本接近)。你的插件请求的是9.0.0.0,我们需要把这个请求重定向到实际的9.0.1.0版本,同时指定DLL的位置:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- 处理6.0.0.0版本 -->
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      <codeBase version="6.0.0.0" href="Newtonsoft.Json.dll" />
    </dependentAssembly>

    <!-- 处理9.0.x版本 -->
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
      <!-- 把对9.0.0.0的请求重定向到实际的9.0.1.0版本 -->
      <bindingRedirect oldVersion="9.0.0.0" newVersion="9.0.1.0" />
      <!-- 指向9.0.1.0版本DLL的存放路径 -->
      <codeBase version="9.0.1.0" href="dlls\9.0.0.0\Newtonsoft.Json.dll" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

场景B:9.0.x版本DLL的程序集版本是9.0.0.0

如果程序集版本刚好和插件期望的9.0.0.0一致,那问题大概率出在路径或权限上:

  • 检查bin\dlls\9.0.0.0\Newtonsoft.Json.dll是否存在(href路径是相对于应用程序bin目录的)。
  • 确保应用程序池的身份账号有读取该文件夹和DLL的权限。
  • 清理bin目录,重新部署两个版本的DLL,然后重启应用程序池。

第三步:验证修复效果

修改配置后:

  • 重启你的ASP.NET应用(或回收应用程序池)。
  • 测试两个插件,确认都不会再出现程序集加载错误。

为什么这样配置能解决问题

  • 绑定重定向:告诉CLR“当某个组件请求X版本时,改用Y版本代替”,这解决了你配置version="9.0.1.0"时出现的“程序集清单定义不匹配”错误。
  • codeBase:明确告诉CLR每个版本的DLL具体存放在哪里,这解决了你配置version="9.0.0.0"时出现的“找不到指定文件”错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:02:40