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

Jim*_*amb 81 asp.net-mvc json.net nuget visual-studio-2013 asp.net-mvc-5.1

我在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>
Run Code Online (Sandbox Code Playgroud)

这正是警告建议的内容.

我该如何修复此警告?

Jim*_*amb 96

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

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

  • +1 - 当我不得不做这样的事情时,它真的让我发疯.这就是为什么我总是犹豫点击nuget包管理器上的升级. (30认同)
  • 我找到了两个引用,一个用于v6,一个用于v5,但我删除(未替换)v5.之后,我没有遇到任何问题,例如"程序集引用失败"或UI中的两个对Newtonsoft.Json的引用.我猜*有人塞满了'install.ps1` (12认同)

McG*_*Gaz 27

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

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

 Update-Package Newtonsoft.Json
Run Code Online (Sandbox Code Playgroud)

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

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


小智 19

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

<ItemGroup>
<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)


小智 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>
Run Code Online (Sandbox Code Playgroud)

  • OP已经在他的web.config中进行了这种绑定重定向. (2认同)

小智 7

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

好的,希望这应该可以解决所有(合理的)程序集引用差异...

  1. 检查错误。

上网浏览

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

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

  1. 右键单击该装配的引用,然后选择“属性”。

在相关项目的“参考”列表中进行装配

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

显示装配版本的属性表

  1. 粘贴到newVersion属性中。

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

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

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

麾。


Jer*_*own 7

我从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>
Run Code Online (Sandbox Code Playgroud)

<ItemGroup>
    <Reference Include="Newtonsoft.Json">
      <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我删除了ItemGroup,其中将引用包装到带有11.0.1版本的提示路径。

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

我非常希望微软能够从弹出的窗口中解决这些Visual Studio DLL的地狱问题。它发生得太频繁了,并导致进度突然停止,直到修复,这通常是通过反复试验造成的。

  • 这正是问题所在。谢谢! (2认同)
  • 我也有两个条目。两者版本完全相同但也出现此错误。我删除了第二个 &lt;Reference... - 节点,消息消失了。感谢您的提示! (2认同)

小智 6

请记住,使用绑定重定向

oldVersion="0.0.0.0-6.0.0.0"

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