运行时无法加载文件或程序集'Newtonsoft.Json,Version = 6.0.0.0 ...“,间接依赖程序集继续寻找旧版本

Jef*_*ang 7 .net c# json json.net .net-assembly

我有一个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 this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Azure.KeyVault.2.0.6\lib\net45\Microsoft.Azure.KeyVault.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Using this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Azure.KeyVault.WebKey.2.0.4\lib\net45\Microsoft.Azure.KeyVault.WebKey.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Using this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Rest.ClientRuntime.2.3.2\lib\net45\Microsoft.Rest.ClientRuntime.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Using this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Rest.ClientRuntime.Azure.3.3.1\lib\net45\Microsoft.Rest.ClientRuntime.Azure.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Resolved file path is "F:\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll". (TaskId:19)
2>      Reference found at search path location "{HintPathFromItem}". (TaskId:19)
2>      Found related file "F:\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.xml". (TaskId:19)
2>      The ImageRuntimeVersion for this reference is "v4.0.30319". (TaskId:19)
Run Code Online (Sandbox Code Playgroud)

然后,我尝试将所有这4个nuget软件包升级到最新版本,并在解决方案,清理解决方案和重建中重新安装了软件包,然后重试,但仍然失败。

有谁遇到过同样的问题,如何解决呢?

小智 0

只需从所有位置删除任何 Newtonsoft.Json 链接即可:

  • *.csproj
  • 包配置
  • 包文件夹
  • bin文件夹
  • 您可以找到的任何其他地方

关闭项目,然后再次安装包:Install-Package Newtonsoft.Json -12.0.0

另外,如果有链接,请检查任何其他项目中的 Newtonsoft.Json 版本。