无法加载文件或程序集Newtonsoft.json.dll

Sag*_*gar 9 .net c# asp.net-mvc winforms

"无法加载文件或程序集'Newtonsoft.Json,版本= 4.0.3.0,文化=中性公钥= 30ad4fe6b2a6aeed’或它的一个依赖.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)".

发布到twitter时需要"NewtonsoftJson.dll"程序集.使用的版本是4.0.3.0.

并且相同的程序集(但是diff版本4.0.0.0)被用作facebook C#api(dll)的依赖程序集.但是,上述程序集(4.0.3.0)对两种情况都不起作用(即发布到twitter和登录facebook).为了解决这个问题,在一个单独的项目张贴到Twitter和分别引用组件(4.0.3.0)(在项目为Twitter发布).而另一个版本(4.0.0.0)的溶液中加入作为在Facebook主项目引用但仍然是错误来了.如果Twitter项目被禁用并运行,那么Facebook登录工作正常和副vera.

我做了很多研究并尝试了以下方法.

删除临时asp.net文件清理解决方案重启计算机

甚至试图从gac卸载程序集(但它没有在那里注册).

请帮助我,因为它无法正常工作.谢谢,S

Mik*_*ray 8

目前尚不清楚项目的关系是什么,或者何时发生这种错误,但这是一个猜测.

你有3个项目的facebook项目(参考4.0.0.0版本),twitter项目(参考4.0.3.0版本),以及一个主要项目,它们都是这两个项目的参考.您可以构建此解决方案,但是当您运行程序集绑定时将失败.为什么?因为默认行为是在运行之前在本地复制程序集.会发生的是第一个将副本构建到bin(比如twitter)的项目,然后第二个项目构建(facebook),然后是main.但是,在此结束时,4.0.0.0版本是坐在bin文件夹中.当您运行时,只要您从twitter调用某些尝试使用问题程序集的内容,绑定就会失败,因为它可以更长时间访问程序集的4.0.3.0版本.

有几种方法可以解决这个问题.一种是在GAC中注册两个程序集.如果这不可行,那么请查看配置文件中的程序集绑定重定向.另一种方法是注册AssemblyResolve事件并以编程方式加载程序集.


小智 8

将以下内容添加到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-4.5.0.0" newVersion="4.5.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
Run Code Online (Sandbox Code Playgroud)

在你的<configuration></configuration>标签内