C# Nuget 包错误依赖

C# Nuget package wrong dependency

我们的 C# 应用程序使用 Nuget 包 Microsoft.Rest.ClientRuntime。作为依赖项之一,此 Nuget 包已安装 Newtonsoft.Json 个 Nuget 包。目前它看起来像下面这样:

我看到 Newtonsoft.Json 程序集的版本是 12.0.3。

在 运行 应用程序之后我得到异常错误:

Could not load file or assembly Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b

我真的不明白为什么它需要第 10 节,如果那应该是第 12 节?

复制到输出文件夹的程序集是 v.12:

在互联网上搜索了很长时间后,我尝试在 Net Reflector 中打开 dll,因此发现 Microsoft.Rest.ClientRuntime 程序集查找 Newtonsoft.Json v. 10 而不是 v . 12 应该是:

我已尝试更新该解决方案的所有 Nuget 包,但没有帮助。

所以我的问题 - 我该如何解决?或者如何将其指向正确的程序集版本?

环境:

实际上,当您引用Newtonsoft.Json v12.0.3时,正确的dll版本是12.0.0.0

要解决此问题,请尝试以下操作:

1) clean nuget caches first 或者删除C:\Users\xxx(current user)\.nuget\packages

下的所有缓存文件

2)关闭VS删除解决方案文件夹下的.vs隐藏文件夹,binobj文件夹

3)进入nuget包Newtonsoft.Json v12.0.3,通常在<solution folder>\packages\Newtonsoft.Json.12.0.3\lib\net45.

运行 Developer Command Prompt for VS2019 as Administrator 然后进入其下的路径

键入这些以将 Newtonsoft.Json.dll 注册到 GAC:

cd xxxxx (the path of the the Newtonsoft.Json 12.0.0.0)

gacutil /i Newtonsoft.Json.dll

4) 或者你可以在配置文件中添加 bindredirect:

<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
         <dependentAssembly>  
            <assemblyIdentity name="Newtonsoft.Json"  
                              publicKeyToken="xxxxx"  
                              culture="neutral" />  
            <bindingRedirect oldVersion="0.0.0.0-12.0.0.0"  
                             newVersion="12.0.0.0"/>  
         </dependentAssembly>  
      </assemblyBinding>  
   </runtime>  
</configuration> 

然后,重建您的项目以测试问题是否仍然存在。

更多信息,可以参考.

===================================

更新 1

解决方案

首先,卸载项目中的 Microsoft.Rest.ClientRuntimeNewtonsoft.Json nuget 包以创建一个干净的环境。

然后,先安装Microsoft.Rest.ClientRuntime nuget包,同时安装依赖[=​​23=]。

确保您已将 Newtonsoft.Json nuget 包降级到 10.0.3 版本,以便解决问题。