在新的ASP.NET MVC 5项目中更新NuGet包引用后,如何修复与JSON.NET的程序集版本冲突?

问题描述 投票:74回答:10

我在VS 2013(Update 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>

这正是警告建议的内容。

我该如何修复此警告?

asp.net-mvc json.net nuget visual-studio-2013 asp.net-mvc-5.1
10个回答
95
投票

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

  • 在VS中卸载项目
  • 编辑.csproj文件
  • 搜索所有对Newtonsoft.Json程序集的引用 找到两个,一个到v6,一个到v5 用v6替换v5的引用
  • 重新加载项目
  • 构建并注意程序集引用失败
  • 查看引用,看看现在有两个到Newtonsoft.Json。删除无法解决的问题。
  • 重建 - 没有警告

0
投票

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

去安装nuget的项目的csproj,并将AutoGEneratedBindingRedirects设置为false

<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>

Full article in MSDN.


27
投票

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

要解决此问题,在Web Api更新后,我打开了Tools> NuGet Package Manager>程序包管理器控制台并运行:

 Update-Package Newtonsoft.Json

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

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


15
投票

我发现从项目文件中删除此部分修复了问题。

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


9
投票

如果以上都不起作用,请尝试在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>

4
投票

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

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

  1. 检查错误。

Surf to the website

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

Existing web.config assembly redirect

  1. 右键单击程序集的引用,然后选择“属性”。

Assembly in the Reference list, in the relevant project

  1. 检查Properties表中的Version(而不是Runtime版本)。收到。

Properties table showing Version of assembly

  1. 粘贴到newVersion属性中。

web.config assembly redirect with updated newVersion

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

web.config assembly redirect with updated oldVersion

麾。


3
投票

请记住,使用绑定重定向

oldVersion = “0.0.0.0-6.0.0.0”

您说旧版本的dll介于版本0.0.0.0和版本6.0.0.0之间。


2
投票

我从Newtonsoft.Json 11.0.1升级到12.0.2。在Notepad ++中打开项目文件我发现了两者

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

我删除了包含引用的ItemGroup,其中提示路径为版本11.0.1。

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

我非常希望微软能够解决这些视觉工作室DLL地狱问题。它经常发生并导致进展停止直到它被修复,通常是通过反复试验。


0
投票

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

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

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

这就是我修复它的方法:

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

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

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


0
投票

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

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

现在我的项目再次构建。

© www.soinside.com 2019 - 2024. All rights reserved.