添加WebAPI
后,将其注册到Global.asax
。
我们发现我们的网络应用程序在这一行中断:
Line 17: GlobalConfiguration.Configure(WebApiConfig.Register);
错误讯息:
Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral,
PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.
The system cannot find the file specified.
经过一些检查后,我发现我们在此Json.net 6
应用程序中使用了MVC 5.1
。这是否意味着我们必须降级到Json.net 4.5
WebAPI
才能工作?
在我的.csproj
文件中,只有一个条目:
<Reference Include="Newtonsoft.Json, Version=6.0.3.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.6.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>False</Private>
</Reference>
当我在Json.NET
中查看我的Manage NuGet Packages
时,它还说我的Json.NET
是版本6.0.3。
此外,bindingRedirect
中已有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>
但是,如果我查看visual studio中的Web项目的references
。 Newtonsoft.Json
指向C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\Newtonsoft.Json.dll
但Copy Local
的路径为false。
怎么会这样?我们如何处理这场冲突?
答案 0 :(得分:11)
您需要在web.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>
答案 1 :(得分:4)
在我将Web Api更新为最新版本之前,重定向对我不起作用:
PM> update-package Microsoft.AspNet.WebApi.Client -Version 4.0.30506
Updating 'Microsoft.AspNet.WebApi.Client' from version '4.0.20710.0' to '4.0.30506.0' in project 'TestProject.Api'.
<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>
答案 2 :(得分:2)
好的,这是我的修复。
我不知道的一件事是Json.net引用如何指向Blend
文件夹中的dll。
我尝试重新NuGet,但发现它相当不方便,因为WebApi和WebGrease都依赖它。
所以我只是继续删除该引用。那当然会破坏一切相关的东西。
当添加引用时,我只需通过浏览到此项目内/.package
文件夹下的dll来添加引用。
有效!
相当野蛮?请确保我们检查了
在所有基地都被覆盖后敢于尝试。