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 包,但没有帮助。
所以我的问题 - 我该如何解决?或者如何将其指向正确的程序集版本?
环境:
- Visual studio 2019
- .Net 4.7.2
- Windows 10 x64
实际上,当您引用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
隐藏文件夹,bin
和obj
文件夹
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.ClientRuntime
和 Newtonsoft.Json
nuget 包以创建一个干净的环境。
然后,先安装Microsoft.Rest.ClientRuntime
nuget包,同时安装依赖[=23=]。
确保您已将 Newtonsoft.Json
nuget 包降级到 10.0.3
版本,以便解决问题。
我们的 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 包,但没有帮助。
所以我的问题 - 我该如何解决?或者如何将其指向正确的程序集版本?
环境:
- Visual studio 2019
- .Net 4.7.2
- Windows 10 x64
实际上,当您引用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
隐藏文件夹,bin
和obj
文件夹
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.ClientRuntime
和 Newtonsoft.Json
nuget 包以创建一个干净的环境。
然后,先安装Microsoft.Rest.ClientRuntime
nuget包,同时安装依赖[=23=]。
确保您已将 Newtonsoft.Json
nuget 包降级到 10.0.3
版本,以便解决问题。