在新的ASP.NET MVC 5项目中更新NuGet包引用之后,如何修复与JSON.NET的程序集版本冲突?
我在VS 2013(Update 1)中创build了一个新的ASP.NET MVC 5 Web项目,然后更新了所有的NuGet包。 当我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参考差异…
- 检查错误。
- 程序集redirect后检查web.config。 创build一个如果不存在。
- 右键单击程序集的引用,然后select“属性”。
- 在属性表中检查版本(不是运行时版本)。 收到。
- 粘贴到newVersion属性中。
- 为了方便起见,将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,但其他项目。
这是我如何解决它:
- 我确定所有使用最新版本(6)的项目都使用NuGet Update来更新当前使用任何版本的json的所有项目 – 这并没有解决问题
- 我使用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立。