我有一个C#项目,它直接引用了Newtonsoft.Json和其他一些引用(它间接引用了Newtonsoft.Json)。我想在所有位置将Newtonsoft.Json版本从6.0.8升级到最新的12.0.2。
最初我得到了参考程序集无法解决的问题,但是在搜索之后,我尝试将绑定放入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-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
我的项目如下所示:
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>True</Private>
</Reference>
Run Code Online (Sandbox Code Playgroud)
现在,问题在运行时调用库时出现,它引发以下错误:
mymethod引发了一个异常,将重试:无法加载文件或程序集“ Newtonsoft.Json,版本= 6.0.0.0,Culture =中性,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一。该系统找不到指定的文件。”
使用AsmSpy,似乎间接引用是根本原因:
参考:Newtonsoft.Json,版本= 6.0.0.0,文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed Newtonsoft.Json,版本= 6.0.0.0,文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed来源:Microsoft.Azure.KeyVault,版本6.0.0.0 = 2.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35 6.0.0.0(由Microsoft.Azure.KeyVault.WebKey,版本= 2.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35 6.0.0.0由Microsoft.Rest.ClientRuntime,版本= 2.0 .0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 6.0.0.0(Microsoft.Rest.ClientRuntime.Azure,版本= 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35
通过启用诊断项目输出,在构建时看起来不错:
2> Unified primary reference "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". (TaskId:19)
2> Using …
Run Code Online (Sandbox Code Playgroud)