use*_*755 224 asp.net json.net
我收到了错误
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)
它也没用
bob*_*h75 233
在包管理器控制台中执行:Update-Package –reinstall Newtonsoft.Json
.
UPDATE
我最初将此作为评论发布,但正如@OwenBlacker建议我将它放在这里:
如果在执行此操作后仍然出现错误,那么最终对我有用的是我<dependentAssembly>
从.config
文件中删除了Json.Net的部分.如果不存在,重新安装会将其恢复,显然您需要将其删除.直到包装本身有一个正常的解决方案,我担心这个手动步骤是必须的.
注意:在执行此操作之前,请阅读以下注释.
根据René在下面的评论BE AWARE,答案中发布的命令将在您的解决方案中的每个项目中重新安装软件包.因此,如果您在多个项目中使用Newtonsoft.Json包并且可能使用不同的版本,则执行上述命令可能会产生不良后果.
小智 119
对于遇到Newtonsoft.Json v4.5版本问题的每个人,请尝试在web.config或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-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
重要信息:检查configuration
配置文件的标记是否没有命名空间属性(如/sf/answers/840785501/中所述).否则,assemblyBinding
标签将被忽略.
Kad*_*Can 41
关键是在配置文件中引用正确的版本.
脚步;
1-查看项目引用属性中Newtonsoft.Json.dll的版本,包文件夹中的版本是什么(例如我的版本是7.0.1,参考版本是7.0.0.0)
2-看看项目在异常中对你的期望(我的是6.0.0.0)
3-将依赖程序集添加到配置文件中,因为它应该是..
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
Kar*_*und 24
我对这里提出的任何解决方案都没有运气(卸载,重新安装,删除引用,创建bindingRedirects等).我不得不回到旧版本的Newtonsoft.版本5.0.6之前一直在工作,所以我尝试了那个.我不得不在Package Console中输入这两个命令:
uninstall-package newtonsoft.json -force
install-package newtonsoft.json -version "5.0.6"
-force
需要第一个命令中的选项才能强制卸载.与其他程序集的依赖关系会阻止没有它的卸载.
MiM*_*iMo 22
我修复了将此绑定重定向添加到我的.config文件的问题:
<runtime>
. . .
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
错误消息抱怨没有找到版本4.5.0.0,当前版本的Newtonsoft.Json是6.0.0.0所以重定向应该从4.5到6.0,而不是反之亦然
Bru*_*oLM 21
我认为你指向错误的目标,将其更改为4.5而不是6.0
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
这应该工作.
eko*_*nov 19
我花了几天时间试图解决这个令人沮丧的问题.我已经尝试了几乎所有可以在网上找到的东西.最后,我发现在一个解决方案中,不同的目标.Net项目版本(4.5和4.5.1)可能会导致此错误(就像我的情况一样).下面的步骤对我来说是固定的:
Properties
.如果可能,为所有项目设置相同的.Net版本.如果不是至少尝试更改启动项目(对我来说这是导致问题的那个).
Newtonsoft.Json
从解决方案中删除所有包.
uninstall-package newtonsoft.json -force
更新所有文件中的所有Newtonsoft.Json
版本packages.config
,如下所示
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />
Newtonsoft.Json
从"程序包管理器控制台" 重新安装:
install-package newtonsoft.json
重建解决方案
(可选)7.如果更改了"启动"项目,请再次返回
小智 11
uninstall-package newtonsoft.json -force
install-package newtonsoft.json
Run Code Online (Sandbox Code Playgroud)
对我来说诀窍:)
小智 8
您的解决方案中有2个不同版本的JSON.NET库.要解决此问题,您应该将它们升级到最新版本.跟着这些步骤:
1-Open解决方案资源管理器2-右键单击解决方案名称3 - 选择Manage Nuget Packages for Solution 4 - 从菜单5中选择更新 - 更新JSON.NET包
这将解决您的问题.
将正确的版本部署到CI计算机
这告诉您程序集加载程序找到了不同版本的Newtonsoft.Json
程序集,它与您在项目中创建的引用不匹配.要正确加载程序集,必须将程序集与已编译的代码并排部署,或者在目标计算机中安装正确版本的程序集(即在GAC中).
备选方案:确保配置在正确的文件中
如果要保留当前解决方案并加载具有不同版本的程序集,请确保您发布的配置位于正确的.config
文件中.请记住,没有xpto.dll.config
,应用程序加载的DLL总是使用正在运行的应用程序的配置文件.
通常添加绑定重定向应解决此问题,但它不适合我.几个小时后我的头靠在墙上,我意识到有一个xmlns属性导致我的web.config出现问题.从Web.config中的配置节点中删除xmlns属性后,绑定重定向按预期工作.
小智 5
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
Run Code Online (Sandbox Code Playgroud)
对我有用....只需将您使用的版本放在newVersion即(newVersion ="7.0.0.0")
关闭解决方案
打开packages.config
并*.csproj
使用文本编辑器删除任何行都有Newtonsoft.Json
例如:
<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
要么
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
再次打开解决方案并重新安装Newtonsoft.Json Install-Package Newtonsoft.Json
它对我有用.
我遇到了同样的错误,并通过添加以下代码在生产中解决了错误。
答案为时已晚,但可能会对某人有所帮助。
<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)
归档时间: |
|
查看次数: |
344863 次 |
最近记录: |