FileLoadException未被用户代码处理

时间:2014-05-05 20:53:44

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

我正在为我的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看起来已正确安装。

enter image description here

enter image description here

enter image description here


更新2

当在Globals.Asax中注释掉API路由时,JSON.Net实际上似乎有效。这不会引起任何错误:

public ActionResult Index()
{
     var foo = Newtonsoft.Json.JsonSerializer.Create();
     return View();
}

Visual Studio仅在取消注释此行时才会抱怨:

WebApiConfig.Register(GlobalConfiguration.Configuration);

3 个答案:

答案 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安装它。