我收到了错误
System.IO.FileLoadException:无法加载文件或程序集"Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我的CI构建
我试过的解决方案
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
它也没用
我已经着手在Newtonsoft.Json中重复出现汇编版本冲突(与我之前的问题有关为什么Newtonsoft.Json如此容易出现汇编版本冲突?)以便更好地理解它,但我无法触发它.
从最顶层的答案来看,如果我的项目A引用了一个版本的Json.NET,那么它应该会发生,然后它引用一个项目B,它本身引用了一个不同的版本(并且它们没有用于处理问题的程序集重定向).
我已经使用类库项目和命令行项目制作了一个解决方案,这两个项目都引用了我用Nuget Package Manager为两个项目安装的Newtonsoft.Json,然后我编辑了类库packages.config以使用旧版本:
<package id="Newtonsoft.Json" version="6.0.1" targetFramework="net452" />
Run Code Online (Sandbox Code Playgroud)
命令行项目引用最新版本:
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net452" />
Run Code Online (Sandbox Code Playgroud)
这不会触发问题,但是,项目仍然成功构建并执行(我只是序列化一个字符串并从两个项目中打印它,我从EXE调用DLL以确保它尝试加载两个版本的Newtonsoft.Json.
如果需要,我已经在https://github.com/sashoalm/ReproduceNewtonsoftJsonBug上传了测试项目.
为什么不会触发错误?