我正在为我的MVC-4应用设置API,当我在Globals.asax.cs中取消注释这一行时:
WebApiConfig.Register(GlobalConfiguration.Configuration);
当我重新开始我的项目时,我收到了这个例外:
An exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll but was not handled in user code
Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
我该怎么办?
更新1(截图)
据我所知,JSON.Net看起来已正确安装。
更新2
当在Globals.Asax中注释掉API路由时,JSON.Net实际上似乎有效。这不会引起任何错误:
public ActionResult Index()
{
var foo = Newtonsoft.Json.JsonSerializer.Create();
return View();
}
Visual Studio仅在取消注释此行时才会抱怨:
WebApiConfig.Register(GlobalConfiguration.Configuration);
答案 0 :(得分:13)
今天也发生在我身上。似乎有一个json.net(现在的版本6.0.3)的更新,导致nuget在构建后下载最新版本。但是,当存在与其他库的依赖关系时,对旧的json.net库的引用可能不会更新。
解决方案:手动打开解决方案窗口的manage nuget包并卸载json.net的旧版本。然后获取最新版本并安装所有需要的项目。这解决了你对我的确切错误......
- 编辑 -
好的,所以我发现这个解决方案适合我本地,但是远程这并不能解决我的问题。似乎有一些来自其他库的旧依赖项很难引用json.net的4.5.0.0版本。 Stackoverflow.com上的更多主题提供了以下解决方案。
将此程序集绑定重定向添加到 web.config 文件:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-4.5.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
答案 1 :(得分:0)
最有可能Newtonsoft.Json
DLL未正确部署。
确保您的(IIS /项目)Newtonsoft.Json
文件夹中有bin
DLL
或者,如果您计划在多个项目中使用该DLL,也可以将该DLL安装到GAC。
答案 2 :(得分:0)
看起来你没有安装/引用Newtonsoft.Json。 Web API依赖于此并且在您解决此依赖关系之前无法正常工作。您可以通过NuGet安装它。