无法在MVC4 Web API中加载文件或程序集'System.Net.Http,Version = 2.0.0.0

Rem*_*emy 91 asp.net asp.net-mvc-4 asp.net-web-api

我有一个奇怪的问题.
我使用MVC 4和新的Web API开发了一个应用程序,它在本地工作正常.我在服务器上安装了MVC4并部署了应用程序.现在我收到以下错误:

无法加载文件或程序集'System.Net.Http,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其来源的更多信息

有趣的是,我在本地包含在我的包文件夹或ASP.NET MVC 4\Assemblies文件夹中的System.Net.Http版本是1.0.0.0.我实际上从我的项目中删除了对System.Net.Http的引用,但我仍然得到相同的消息.我有点困惑的是它从哪里获得2.0.0.0参考,以及为什么它在本地工作但不在服务器上.

查看nuget依赖项:

ASP.NET WEb API核心库(Beta)依赖于System.Net.Http.Formatting.
System.Net.Http.Formatting依赖于System.Net.Http.
我猜这就是它的来源.但我确实安装了这个软件包的2.0.20126.16343版本,它只是内部的dll版本为1.0.0.0

我错过了什么吗?

更新:

这是另一个ASP.NET应用程序的子应用程序,但另一个仍然基于WebForms.所以,有些东西搞砸了.但是,如果我在web.config中的汇编部分下执行清理,如果甚至不再找到应用程序本身.

小智 114

在IIS 6.0上部署先前转换的(从.NET 4.5到4.0)Web应用程序时,我遇到了同样的错误.

在我发现的web.config 运行时部分中

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

我改成了

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

现在就像魅力一样.

  • 是否仍然将程序集设置为使用此更改进行本地复制? (4认同)
  • 对我来说问题是我的一个Web Api NuGet包依赖于System.Net.Http 2.0.0.0,但我的参考是2.1.10.0,它被输出到我的bin文件夹. (3认同)
  • 问题可能不是对System.Net.Http的直接引用,而是在您引用的其他库之一中使用的间接引用.这就是为什么设置本地副本通常不会解决这个问题. (3认同)
  • 这是正确的(正如贾斯汀迈克尔斯所说).依赖性是指2.0.0.0,但您的程序集引用是2.1.xx所有您需要解决的是绑定重定向. (2认同)
  • 这个应该被标记为正确的答案.我猜这就是为什么所有其他用户都推高了这个选项.谢谢你,Krzysztof! (2认同)

Ale*_*sky 30

将app应用到appharbor我遇到了同样的问题.问题是它还不支持.NET 4.5.我做了什么.

  1. 将我的项目切换到.NET 4.0配置文件.
  2. 卸载的Web API NuGet包.
  3. 再次安装Web API(Beta)NuGet包.
  4. 验证.csproj文件包含所有引用的程序集,因此它始终从Bin文件夹而不是GAC中获取.


Cli*_*ive 10

我的工作:

请注意1-4到2.0的重定向

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a"   culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)