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

从.NET Framework项目引用.NET Standard DLL时解决NuGet库冲突

解决Newtonsoft.Json跨.NET Standard类库与WPF应用的类型加载冲突问题

兄弟,我之前踩过一模一样的Newtonsoft.Json跨项目版本冲突坑,给你几个亲测有效的解决思路,你挨个试试:

  • 统一所有项目的Newtonsoft.Json版本
    这是最核心的一步,不同项目用不同版本的Json库是冲突的根源。你可以:

    1. 打开解决方案的NuGet包管理器,把.NET Standard类库和WPF项目里的Newtonsoft.Json都升级/降级到同一个稳定版本(比如13.0.1,这个版本对.NET Framework 4.6.1+和.NET Standard 2.0+都支持得很好)。
    2. 更省心的方式是全局控制版本:在解决方案根目录新建Directory.Build.props文件,写入以下代码,强制所有项目使用指定版本的Newtonsoft.Json:
      <Project>
        <PropertyGroup>
          <NewtonsoftJsonVersion>13.0.1</NewtonsoftJsonVersion>
        </PropertyGroup>
        <ItemGroup>
          <PackageReference Update="Newtonsoft.Json" Version="$(NewtonsoftJsonVersion)" />
        </ItemGroup>
      </Project>
      
  • 修复WPF项目的程序集绑定重定向
    .NET Framework项目依赖绑定重定向来解决版本冲突,有时候NuGet自动生成的配置会出错。你可以:

    1. 打开WPF项目的app.config,添加或更新绑定重定向配置:
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      
      注意把newVersion改成你实际使用的版本号,Newtonsoft.Json的公钥令牌是固定的30ad4fe6b2a6aeed,别写错。
    2. 也可以让Visual Studio自动生成正确的重定向:右键WPF项目 → 属性 → 应用程序 → 勾选「自动生成绑定重定向」,然后重新编译项目。
  • 清理缓存并全量重建
    旧的编译缓存经常会搞事情,按这个步骤来:

    1. 点击Visual Studio顶部的「Build → Clean Solution」清理解决方案。
    2. 手动删除所有项目的bin和obj文件夹(可以用资源管理器批量删除,或者写个简单的批处理)。
    3. 清理NuGet缓存:「工具 → NuGet包管理器 → 包管理器设置 → 清除所有NuGet缓存」。
    4. 最后点击「Build → Rebuild Solution」全量重建。
  • 排查间接依赖的版本冲突
    有时候你的类库可能通过其他NuGet包间接引用了不同版本的Newtonsoft.Json。你可以在NuGet包管理器的「已安装」标签里,查看类库的依赖树,看看有没有其他包依赖了旧版本的Json库。如果有,要么升级那个依赖包到兼容你统一版本的版本,要么在类库的csproj里添加强制版本的配置:

    <ItemGroup>
      <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    </ItemGroup>
    
  • 用程序集加载日志定位深层问题
    如果上面的方法都没用,那就开日志找根因:在WPF项目的app.config里添加日志配置:

    <configuration>
      <runtime>
        <logAssemblyBindings xmlns="urn:schemas-microsoft-com:asm.v1" />
      </runtime>
    </configuration>
    

    运行程序后,日志会输出到%windir%\Microsoft.NET\Framework\v4.0.30319\Config\assemblyBindingLog.xml(根据你的.NET Framework版本调整路径)。打开日志看看Newtonsoft.Json的加载路径和版本,就能知道到底是哪个版本的程序集在搞鬼了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:09:33