92

我在 VS 2013(更新 1)中创建了一个新的 ASP.NET MVC 5 Web 项目,然后更新了所有 NuGet 包。当我构建项目时,我收到以下警告:

警告 MSB3243:无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”和“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”之间的冲突。

但是,当我检查 web.config 时,我看到绑定重定向已经到位:

  <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>

这正是警告所建议的。

我该如何解决这个警告?

4

11 回答 11

109

这是我用来修复警告的步骤:

  • 在 VS 中卸载项目
  • 编辑 .csproj 文件
  • 搜索对 Newtonsoft.Json 程序集的所有引用
    • 找到了两个,一个到 v6,一个到 v5
    • 将 v5 的引用替换为 v6
  • 重新加载项目
  • 构建和通知程序集引用失败
  • 查看 References 并看到现在有两个 Newtonsoft.Json。删除无法解决的问题。
  • 重建 - 没有警告
于 2014-02-01T14:45:01.793 回答
32

我遇到了这个问题,因为我更新了包,其中包括 Microsoft.AspNet.WebApi,它引用了 Newtonsoft.Json 4.5.6,并且我已经安装了版本 6。使用版本 6 不够聪明。

为了解决这个问题,在 WebApi 更新后,我打开了 Tools > NuGet Package Manager > Pacakge Manager Console 并运行:

 Update-Package Newtonsoft.Json

日志显示 6.0.x 和 4.5.6 版本都更新到最新版本,一切正常。

我有一种感觉,这会再次出现。

于 2014-10-30T16:11:11.113 回答
21

我发现从项目文件中删除此部分可以解决问题。

<ItemGroup>
<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>

于 2014-02-16T22:48:30.280 回答
16

我从 Newtonsoft.Json 11.0.1 升级到 12.0.2。在记事本++中打开项目文件我发现了

<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>

<ItemGroup>
    <Reference Include="Newtonsoft.Json">
      <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>
  </ItemGroup>

我删除了使用版本 11.0.1 的提示路径包装引用的 ItemGroup。

发现这些问题可能会非常令人沮丧。此外,开发人员通常遵循与以前的项目设置相同的步骤。之前的设置没有遇到这个问题。无论出于何种原因,项目文件偶尔会被错误地更新。

我非常希望微软能够解决这些 Visual Studio DLL 地狱问题的出现。它发生得太频繁了,导致进展戛然而止,直到它被修复,通常是通过反复试验。

于 2019-06-17T20:31:29.710 回答
13

如果以上都不起作用,请尝试在 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>
于 2014-06-27T21:35:38.467 回答
8

程序集重定向错误的最终解决方案

好的,希望这应该有助于解决任何(理智的)程序集参考差异......

  1. 检查错误。

浏览网站

  1. 在程序集重定向后检查 web.config。如果不存在则创建一个。

现有的 web.config 程序集重定向

  1. 右键单击程序集的引用并选择属性。

参考列表中的组装,在相关项目中

  1. 检查属性表中的版本(不是运行时版本)。收到。

显示程序集版本的属性表

  1. 粘贴到 newVersion 属性中。

使用更新的 newVersion 重定向 web.config 程序集

  1. 为方便起见,将 oldVersion 的最后一部分更改为高、圆和虚构的内容。

使用更新的 oldVersion 重定向 web.config 程序集

麾。

于 2016-03-13T15:15:10.660 回答
6

请记住,使用绑定重定向

oldVersion="0.0.0.0-6.0.0.0"

你是说旧版本的dll在0.0.0.0和6.0.0.0之间。

于 2015-06-17T12:58:01.130 回答
2

没有人提到以下内容,在我看来这是正确的解决方案:

转到安装了 nuget 的项目的 csproj,并将其设置AutoGEneratedBindingRedirectsfalse.

<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>

MSDN 中的完整文章。

于 2019-04-17T13:06:24.200 回答
1

我更新了我的软件包,甚至重新安装了它——但我仍然遇到与 OP 提到的完全相同的错误。我通过执行以下操作手动编辑了引用的 dll。

我从参考中删除了 newtonsoft.json.dll,然后从 bin 目录中手动删除了 .dll。然后我手动将newtonsoft.json.dll从nuget包文件夹复制到项目bin中,然后通过浏览.dll文件添加引用。

现在我的项目再次构建。

于 2015-03-07T19:52:40.957 回答
0

我有类似的问题,只是想在我的情况下为其他人发布答案。

我有一个使用多个其他 C# 类库项目运行 ASP.NET Web 应用程序的解决方案。

我的 ASP.NET Web 应用程序没有使用 json,而是使用其他项目。

这就是我修复它的方法:

  1. 我确保所有使用最新版本 (6) 的项目在当前使用任何版本的 json 的所有项目上使用 NuGet 更新 - 这并没有解决问题
  2. 我使用 NuGet 将 json 添加到 Web 应用程序 - 这解决了问题(让我深入了解原因):

第 2 步首先为 json 添加配置信息,建议所有项目使用最新版本(6),无论他们有什么版本。将程序集绑定添加到 Web.Config 很可能是解决方法。

但是,第 2 步也清理了一些遗留代码。事实证明,我们之前在 Web 应用程序中使用了旧版本 (5) 的 json,并且当引用(我怀疑:手动)删除时,NuGet 文件夹没有被删除。添加最新的 json (6),删除旧文件夹 (json v5)。这也可能是修复的一部分。

于 2014-11-19T13:35:15.723 回答
0

Veverke 提到可以通过将 AutoGEnatedBindingRedirects 设置为 false 来禁用绑定重定向的生成。不确定自从发布此问题以来这是否是新事物,但在工具/选项/Nuget 数据包管理器中有一个“跳过应用绑定重定向”选项,可以切换。默认情况下它是关闭的,这意味着将应用重定向。但是,如果您这样做,您将不得不手动管理任何必要的绑定重定向。

于 2020-04-23T09:06:40.853 回答