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

我在VS 2013(Update 1)中创build了一个新的ASP.NET MVC 5 Web项目,然后更新了所有的Nu​​Get包。 当我build立这个项目时,我得到以下警告:

警告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,但是,我看到绑定redirect到位:

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

这正是警告所build议的。

我怎样才能解决这个警告?

这里我用来解决警告的步骤如下:

  • 在VS中卸载项目
  • 编辑.csproj文件
  • search所有对Newtonsoft.Json程序集的引用
    • find了两个,一个是v6,一个是v5
    • 将v5的引用replace为v6
  • 重新加载项目
  • 构build并注意组件引用失败
  • 查看引用,看到现在有两个到Newtonsoft.Json。 删除那个不能解决的问题。
  • 重build – 没有警告

我有这个问题,因为我更新软件包,其中包括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版本全部更新到最新版本,一切都很好。

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

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

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

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

您的程序集的最终解决scheme会redirect错误

好的,希望这应该有助于解决任何 (理智的)assembly参考差异…

  1. 检查错误。

浏览网站

  1. 程序集redirect后检查web.config。 创build一个如果不存在。

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

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

汇编参考列表中的相关项目

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

显示组件版本的属性表

  1. 粘贴到newVersion属性中。

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

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

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

麾。

请记住,绑定redirect

oldVersion = “0.0.0.0-6.0.0.0”

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

我有类似的问题,只是想在我的情况发表一个答案。

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

我的ASP.NET Web应用程序不使用JSON,但其他项目。

这是我如何解决它:

  1. 我确定所有使用最新版本(6)的项目都使用NuGet Update来更新当前使用任何版本的json的所有项目 – 这并没有解决问题
  2. 我使用NuGet将json添加到了Web应用程序中 – 这解决了问题(让我深入了解为什么):

第2步首先为json添加一个configuration信息,这表明所有的项目,使用最新版本(6),不pipe他们有什么版本。 将程序集绑定添加到Web.Config很可能是修复程序。

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

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

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

现在我的项目再次build立。