我在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>
这正是警告所建议的。
如何修复此警告?
答案 0 :(得分:94)
这里是我用来修复警告的步骤:
答案 1 :(得分:26)
我遇到了这个问题,因为我更新了包,其中包含了对Newtonsoft.Json 4.5.6的引用的Microsoft.AspNet.WebApi,我已经安装了版本6。使用版本6并不够聪明。
要解决此问题,请在WebApi更新后打开工具&gt; NuGet包管理器&gt; Pacakge Manager Console并运行:
Update-Package Newtonsoft.Json
日志显示6.0.x和4.5.6版本都更新到最新版本,一切都很好。
我有种感觉会再次出现。
答案 2 :(得分:14)
我发现从项目文件中删除此部分可以解决问题。
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
答案 3 :(得分: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 :(得分:4)
好的,希望这有助于解决任何(理智)程序集引用差异......
答案 5 :(得分:3)
请记住使用绑定重定向
oldVersion = “0.0.0.0-6.0.0.0”
您说旧版本的dll介于版本0.0.0.0和版本6.0.0.0之间。
答案 6 :(得分:2)
我从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的地狱问题。它发生得太频繁了,并导致进展缓慢,直到通过修复和修复将其修复为止。
答案 7 :(得分:0)
我有类似的问题,只是想在我的情况下为其他人发布答案。
我有一个运行带有多个其他C#类lib项目的ASP.NET Web应用程序的解决方案。
我的ASP.NET Web应用程序没有使用json,而是使用其他项目。
这就是我修复它的方法:
第2步首先添加了json的配置信息,这表明所有项目都使用最新版本(6),无论他们拥有什么版本。将程序集绑定添加到Web.Config很可能就是修复。
但是,第2步还清理了som遗留代码。原来我们之前在我们的Web应用程序中使用了json的旧版本(5),并且当引用(我怀疑:手动)被删除时,NuGet文件夹没有被删除。添加最新的json(6),删除旧文件夹(json v5)。这也可能是修复的一部分。
答案 8 :(得分:0)
我更新了我的包,甚至重新安装了它 - 但我仍然得到与OP提到的完全相同的错误。我通过执行以下操作手动编辑了引用的dll。
我从我的引用中删除了newtonsoft.json.dll,然后从bin directoy中手动删除了.dll。然后我手动将nutons包文件夹中的newtonsoft.json.dll复制到项目箱中,然后通过浏览到.dll文件添加引用。
现在我的项目再次构建。
答案 9 :(得分:0)
没有人提到以下内容,根据我的理解,这是正确的解决方案:
转到安装了nuget的项目的csproj,然后将AutoGEneratedBindingRedirects
设置为false
。
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
答案 10 :(得分:0)
Veverke提到可以通过将AutoGEneratedBindingRedirects设置为false来禁用绑定重定向的生成。自从发布此问题以来,不确定是否是新事物,但是在Tools / Options / Nuget Packet Manager中有一个“跳过应用绑定重定向”选项,可以切换。默认情况下它是关闭的,这意味着将应用重定向。但是,如果这样做,则必须手动管理所有必要的绑定重定向。