【问题标题】:Could not load file or assembly Newtonsoft.json.dll无法加载文件或程序集 Newtonsoft.json.dll
【发布时间】:2016-06-20 20:12:04
【问题描述】:

“无法加载文件或程序集'Newtonsoft.Json, Version=4.0.3.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)”。

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

Facebook C# api(dll) 使用相同的程序集(但 diff 版本 4.0.0.0)作为依赖程序集。然而,上述程序集(4.0.3.0)不适用于这两种情况(即发布到 twitter 和登录到 facebook)。为了解决它,创建了一个单独的项目以发布到 twitter 并单独引用程序集(4.0.3.0)(在 twitter 帖子的项目中)。另一个版本(4.0.0.0)被添加为 facebook 的主项目中的参考但仍然出现错误。如果 twitter 项目被禁用并运行,则 facebook 登录工作正常,反之亦然。

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

删除临时 asp.net 文件 清洁溶液 重启电脑

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

请帮我解决这个问题,因为它不起作用。 谢谢, S

【问题讨论】:

    标签: c# .net asp.net-mvc winforms


    【解决方案1】:

    不清楚项目的关系是什么,或者何时发生此错误,但这里有一个猜测。

    您有 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 中注册两个程序集。如果这不可行,请查看配置文件中的assembly binding redirection。另一种是注册AssemblyResolve event 并以编程方式加载程序集。

    【讨论】:

    【解决方案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-4.5.0.0" newVersion="4.5.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    

    在您的 &lt;configuration&gt;&lt;/configuration&gt; 标签内

    【讨论】:

      【解决方案3】:

      在所有项目中安装包 Newtonsoft。

      Install-Package Newtonsoft.Json -Version 8.0.3
      

      【讨论】:

        猜你喜欢
        • 2020-08-17
        相关资源
        最近更新 更多