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

Asp.net mvc 在新的ASP.NET MVC 5项目中更新NuGet包引用后,如何修复程序集版本与JSON.NET的冲突?,asp.net-mvc,json.net,nuget,visual-studio-2013,asp.net-mvc-5.1,Asp.net Mvc,Json.net,Nuget,Visual Studio 2013,Asp.net Mvc 5.1,我在VS 2013中创建了一个新的ASP.NET MVC 5 web项目(更新1),然后更新了所有NuGet软件包。构建项目时,我收到以下警告: 警告MSB3243:无法解决“Newtonsoft.Json,版本=6.0.0.0,区域性=中性,PublicKeyToken=30AD4FE6B2A6EED”与“Newtonsoft.Json,版本=4.5.0.0,区域性=中性,PublicKeyToken=30AD4FE6B2A6EED”之间的冲突 但是,当我检查web.config时,我看到绑定

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

警告MSB3243:无法解决“Newtonsoft.Json,版本=6.0.0.0,区域性=中性,PublicKeyToken=30AD4FE6B2A6EED”与“Newtonsoft.Json,版本=4.5.0.0,区域性=中性,PublicKeyToken=30AD4FE6B2A6EED”之间的冲突

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


这正是警告所建议的


如何修复此警告?

以下是我用于修复此警告的步骤:

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

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

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

..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll

如果上述方法均无效,请尝试在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>

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

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

 Update-Package Newtonsoft.Json
日志显示6.0.x和4.5.6版本都更新到了最新版本,一切正常


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

我也有类似的问题,只是想为我这种情况下的其他人发布一个答案

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

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

我就是这样修复的:

  • 我确保所有使用最新版本(6)的项目都在当前使用任何版本的json的所有项目上使用NuGet Update—这并没有解决问题
  • 我使用NuGet将json添加到web应用程序中-这解决了问题(让我深入了解原因):
  • 第2步首先是添加json的配置信息,这表明所有项目都使用最新版本(6),无论它们有什么版本。将程序集绑定添加到Web.Config很可能是解决方案


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

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

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


    现在,我的项目再次构建。

    请记住,使用绑定重定向

    oldVersion=“0.0.0.0-6.0.0.0”

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

    程序集重定向错误的最终解决方案 好的,希望这将有助于解决任何(正常的)程序集引用差异

  • 检查错误
  • 在程序集重定向后检查web.config。如果不存在,则创建一个
  • 在部件的参照上单击鼠标右键,然后选择“特性”
  • 检查属性表中的版本(非运行时版本)。收到
  • 粘贴到newVersion属性中
  • 为方便起见,将旧版本的最后一部分更改为高、圆和虚构的部分

  • 高兴。

    没有人提到以下内容,据我所知,这是正确的解决方案:

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


    我从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>
    
    
    ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll
    

    
    ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll
    
    我删除了用11.0.1版的提示路径包装引用的ItemGroup

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


    我非常希望微软能解决这些突然出现的VisualStudioDLL问题。这种情况发生得太频繁,导致进程突然停止,直到它被修复为止,通常是通过尝试和错误。Veverke提到,可以通过将AutoGEneratedBindingRedirects设置为false来禁用绑定重定向的生成。不确定这是不是一个新的东西,因为这个问题是张贴,但有一个“跳过应用绑定重定向”选项在工具/Options/Nuget数据包管理器,它可以切换。默认情况下,它是关闭的,这意味着将应用重定向
    <ItemGroup>
        <Reference Include="Newtonsoft.Json">
          <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
        </Reference>
      </ItemGroup>