【问题标题】:Newtonsoft.Json Assembly ConflictNewtonsoft.Json 程序集冲突
【发布时间】:2013-07-20 12:14:27
【问题描述】:

我在我的项目中使用 Netonsoft.Json。在我开始将 Paypal SDK 集成到我的项目中之前,它工作正常。我的代码如下。

         String AccessToken =
  new PayPal.OAuthTokenCredential("", "").GetAccessToken(); ---->>>> This Line Throwing An Error
            PayPal.Api.Payments.Address add = new PayPal.Api.Payments.Address();
            add.city = TextBoxCity.Text;
            add.line1 = TextBoxAddress.Text;
            add.phone = TextBoxPhoneNumber.Text;
            add.postal_code = TextBoxZipcode.Text;
            add.state = TextBoxState.Text;
            PayPal.Api.Payments.CreditCard cc = new PayPal.Api.Payments.CreditCard();
            cc.number = TextBoxCreditCardNumber.Text;
            cc.first_name = TextBoxFirstName.Text;
            cc.last_name = TextBoxLastName.Text;
            cc.expire_month = Convert.ToInt16(TextBoxExpiryMonth.Text);
            cc.expire_year = Convert.ToInt16(TextBoxExpiryYear.Text);
            cc.cvv2 = TextBoxCVVNumber.Text;
            cc.billing_address = add;
            cc.Create(AccessToken);

我得到如下错误

       System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我在互联网上搜索并找到了一些更改配置文件的解决方案。所以我将我的配置文件更改如下

        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
     <bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>
</assemblyBinding>

我还使用了诸如复制本地、特定版本之类的程序集属性,但没有什么能帮助我解决这个问题。如何解决程序集冲突?

【问题讨论】:

  • 使用 NuGet 包管理器中的合并选项

标签: c# .net-assembly paypal-sandbox


【解决方案1】:

我刚刚遇到了同样的问题,我通过使用将 Newtonsoft.Json 更新到最新版本来解决它

Update-Package Newtonsoft.Json

然后转到 Web.config 并添加:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>

【讨论】:

  • 将该部分添加到 web.config 为我解决了这个问题。当我今天一次更新一堆 NuGet 包时,这个错误开始突然发生。当我在我的 global.asax 中启动我的 MVC Web 应用程序时它失败了: GlobalConfiguration.Configure(WebApiConfig.Register);我不知道为什么我的 web.config 之前没有这个必需的配置......或者为什么当我更新到最新的 MVC / WebAPI / JSON.NET nuget 包时它停止工作......
  • 我更新了这句话,但 MVC 5 在 web 配置中有: 为什么不更新到这个版本?
  • 我在安装 Microsoft.Owin.Security.Facebook 然后自动安装了 Newtonsoft.Json 并且版本从 4.5.0.0 更改为 6.0.0.0 然后 this 发布帮助时遇到了问题,这些最近的更新确实影响了应用程序,为什么他们不修复它
【解决方案2】:

我在程序集版本 6.0.1 中遇到了同样的问题。我按照 Harold 的指示将以下几行粘贴到 web.config 中:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>

然后我删除了对 Newtonsoft.Json 的项目引用,并删除了 packages.config 文件中对 Newtonsoft.Json 的引用。

我打开了 Nuget Manager 并重新安装了 Newtonsoft.Json。

安装将 web.config 设置更改为以下内容,一切正常:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

【讨论】:

    【解决方案3】:

    +1 给 zbarrier 的解决方案。这就是它起作用的原因...

    +1 给 zbarrier 的回答,帮助我解决了我的问题。装配参考问题是最糟糕的......所以我想我会发布我采取的步骤,以及我学到的一些东西,希望它有所帮助:


    1. 尝试失败:将以下行粘贴到我的web.config

      <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
              <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
              <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
            </dependentAssembly>
          </assemblyBinding>
        </runtime>
      

      ^^^^^ 无效


    1. 解决方案:导航到~/Bin/Newtonsoft.Json.dll,并在 视觉工作室。默认情况下,文件的界面显示一个文件夹 以程序集命名——我双击它展开,然后 终于看到了这个: 然后,我双击 在 1 [Neutral] 图标上,它让我了解了大会的信息, 在这里看到:

      显示Assembly Version 的行是您需要输入的内容 进入&lt;bindingRedirect&gt; 标签的newVersion 属性。所以我拿了 我粘贴的部分(在第一步中)并将“5.0.8”更改为 “6.0.0.0”。我的新 &lt;runtime&gt; 部分如下所示:

        <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
              <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
              <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0"/>
            </dependentAssembly>
          </assemblyBinding>
        </runtime>
      

      ^^^^^ 成功了!!终于……


    其他说明,以防有人仍然感到困惑:

    • &lt;runtime&gt; 标签位于&lt;configuration&gt;&lt;/configuration&gt; 标签内 网络配置。我上面显示的部分直接粘贴在我的 web.config 的 &lt;configuration&gt; 部分的开始标记下方。
    • xmlns 属性表示相应的 XML 命名空间。 程序集的开发人员使用它来避免与 标签冲突。在这种情况下,您应该可以放心使用 上面列出了xmlns="schemas-microsoft-com:asm.v1"
    • 您可以更改oldVersion 属性以转发其他 程序集的版本。例如,我可能会将我的编辑为 看起来更像zbarrier's answer
    • publicKeyToken 是另一个几乎保持不变的属性 对于 Newtonsoft.Json 也是如此。 publicKeyToken 只是一个 公钥的缩短版本——很像标题对 书——在这种情况下并没有真正改变。如果你想 知道程序集的公钥,只需打开可以在开始菜单中找到的Developer Command Prompt,然后使用命令提示符导航到 程序集文件的位置(在本例中为 ~\Bin\),然后运行 sn -T assembly_file_name 命令。所以在这种情况下,命令是 sn -T Newtonsoft.Json.dll。你应该得到这样的回应 这个: 如您所见,Newtonsoft 公众 钥匙 (30ad4fe6b2a6aeed) 就在最后。

    【讨论】:

    • 谢谢。关于该主题的多个其他答案并不清楚是否需要引用主要的程序集版本。在找到这个之前,我已经解决了一段时间。
    • 您究竟是如何使用 Visual Studio 打开 newtonsoft.json.dll 的?
    • 具体步骤取决于您正在使用的项目类型,但基本上您可以像打开任何其他文件一样打开它:在解决方案资源管理器中找到名为 Newtonsoft.Json.dll 的文件,然后双击它。唯一的并发症是它可能被隐藏,因此您必须单击解决方案资源管理器顶部的“显示所有文件”图标。对于大多数项目,在从 Nuget 安装 Newtonsoft 包后,可以在“~\Bin\”目录中找到Newtonsoft.Json.dll。或者,您可以使用“添加”->“现有项目”将文件添加到项目中。
    • 谢谢。拯救我的夜晚!
    【解决方案4】:

    起初,我认为我的案例是相同的旧程序集参考...卸载、重新安装、强制安装、重建、添加重定向程序集...等

    直到我发现另一个程序集导致了问题之前,什么都没有。

    就我而言,当我调用 HttpClient.PostAsJsonAsync(requestURI, T) 方法时,我的代码失败了。由于我的解决方案有多个项目并且其中一些项目使用了旧版本,因此关于 Assembly Reference 的错误让我失望了......结束浪费了很多时间,直到......

    我的解决方案:

    • 从我的参考文献中删除了现有的 System.Net.Http.Formatting
    • 安装了安装包 Microsoft.AspNet.WebApi.Client - 其中 安装了所需的 Http.Formatting。

    安装后,PostAsJsonAsync() 按预期工作!

    希望这可以节省我寻找解决方案的时间!

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,我已经安装了 Newtonsoft.Json v9.0.1 ,sandcastle 停止构建显示相同的错误但版本不同: "无法加载文件或程序集 'Newtonsoft.Json, Version=6.0.0.0,"

      工作原理:使用 SandCastle 要求的版本使用 newtonsoft.json 查找/创建项目,添加文件“Newtonsoft.Json.dll”作为对 SC 项目的引用,然后构建。 (可以在项目的bin文件夹中找到dll)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 1970-01-01
        • 2016-02-29
        • 2016-01-11
        • 2020-06-24
        • 1970-01-01
        相关资源
        最近更新 更多