使用ASP.NET(MVC 4)Web API OData预发行版本无法加载文件或程序集System.Net.Http,Version = 4.0.0.0


81

问题

安装Microsoft ASP.NET Web API OData软件包5.0.0-rc1预发行版后,出现以下异常:

无法加载文件或程序集'System.Web.Http,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)

我的MVC 4项目是全新的,而且规模很小,没有什么花哨的地方。我的目标是.NET Framework 4.5

我需要这个nuget软件包使用Delta类实现PATCH (当我使用4.0.0.0版的软件包时,Delta类无法正常工作)。

我该如何解决?

我的System.Web.Http版本

GAC中,我具有System.Web.Http的版本5.0.0.0

gacutil -l System.Web.Http全局程序集缓存包含以下程序集:System.Web.Http,版本= 5.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL

Visual Studio中,当我浏览程序集时,给定的System.Web.Http版本为4.0.0.0(为什么?)

我的项目中,对System.Web.Http的引用

  • 拥有版本5.0.0.0
  • 指向软件包的\ lib \ net45 \文件夹
  • 具有CopyLocal = true

我尝试过的事情

我试图将重定向v 4.0.0.0绑定到Web.config中的5.0.0.0

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

但这给了我另一个例外:

尝试通过方法'System.Web.Http.GlobalConfiguration..cctor()'访问字段'System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2'失败。

我想核心Web Api引擎确实需要使用v 4.0.0.0。

相关问题

代码分析错误无法在MVC4 Web API中 加载文件或程序集'System.Net.Http,版本= 2.0.0.0。无法在MVC4 Web API中加载文件或程序集'System.Net.Http,版本= 2.0.0.0。


1
也许这个答案可以帮助您:stackoverflow.com/a/18700279/795876
fsenart 2013年

Answers:


164

Visual Studio 2013具有一项新功能可以解决此问题。生成应用程序时,应该看到有关所引用程序集的不同版本的警告。双击警告以将程序集绑定重定向添加到web.config。

有关更多详细信息,请参见http://msdn.microsoft.com/zh-cn/library/2fc472t2.aspx

jeff.eynon在下面指出,您需要将web.config检出(如果使用TFS源代码控制),以使VS自动编辑文件。谢谢你的提示!


7
我希望我可以投票10次。让VS自动执行此操作非常好。谢谢你的小费!
鲍勃·霍恩

4
不幸的是,它并不总是有效。实际上,我经常说,双击此警告无济于事。
Trevor de Koekkoek,2014年

3
您必须检出正在修改的Web /应用程序配置。无论出于何种原因,在这种情况下,VS似乎都不愿意为您检出文件。
jeff.eynon 2014年

39

我通过使用nuget将WebApi软件包升级到预发行版本来使其工作:

PM> Microsoft.AspNet.WebApi -Pre

为了使项目使用最新版本的WebApi,必须对根Web.config进行一些修改:

1)网页版本从2.0.0.0到3.0.0.0

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

2)将System.Web.Http和System.Net.Http.Formatting的绑定重定向到5.0.0.0

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

我想就是这样

PS:受WebAPI OData 5.0 Beta启发的解决方案-访问GlobalConfiguration会引发安全错误


3
这对我有用-由于更新的system.net.http依赖项,在安装最新的CORS Web api程序包时,我遇到了同样的问题。
sandeep talabathula 2014年

1
你是个摇滚人,非常感谢。就我而言,Web配置不是通过nuget restore更新的,我在部署后手动进行了配置。
Leandro

同样,它得到+1,因为当VS不为您执行此操作时,您需要此答案才能使绑定自己工作。
迈克尔·布莱克本

11

我遇到了同样的问题,并通过将以下库的CopyLocal设置为true来解决了该问题:

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

我必须补充一点,我使用MVC4和NET 4


1
这也为我解决了-但是,我真的想知道这实际上意味着什么?
serup

11

当我尝试从项目模板更新Hot Towel项目时,以及从2013年10月23日起在VS 2012中创建空项目并通过nuget安装HotTowel时,都遇到了此问题。

为了解决此问题,我通过Nuget将Web Api Web Host和Web API软件包更新为5.0(当前(2013年10月23日)在NuGet中的当前版本)。

然后,我添加了绑定指令:

<dependentAssembly>
  <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

8

或者您可以从NuGet软件包管理器控制台中执行此操作

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

然后,您将能够添加对System.Web.Http.WebHost 5.0的引用。


4

从引用中删除System.Web.Http和System.Net.Http.Formatting,然后通过浏览到bin文件夹(通过nuget复制到其中)将引用添加回去。现在文件版本为5.0.0.0。


1

在几个不同的项目上,此错误多次弹出。

我最终弄清楚的是,在构建时,bin文件夹中已经有一个system.web.mvc二进制程序集的副本。

要解决此问题,请在引用列表中右键单击装配,然后选择“属性”。通过查看“版本”属性来检查这是否是最新版本。如果是,请将“复制本地”切换为true。

这将确保项目中引用的版本是最终在您的Binaries文件夹中的版本。

如果仍然出现错误,请尝试运行nuGet以获得最新版本,然后再次尝试上述操作。

祝您好运-这个错误很痛苦!


1

我遇到了同样的错误。当我安装Unity Framework for Dependency Injection时,在我的配置中添加了Http和HttpFormatter的新引用。所以这是我遵循的步骤。

我在nuGet软件包管理器控制台上运行了以下命令:PM> Install-Package Microsoft.ASPNet.WebAPI -pre

并添加了对5.0版dll的物理引用


1

我通过nuget解决。首先安装nuget。您使用的第二个。
插图如下:

第三:通过查看“版本”属性来检查这是否是最新版本。

最后:您再次检查项目是否具有最新版本。


0

我遇到了相同类型的问题,并按照以下步骤解决了该问题

转到工具->库软件包管理器->软件包管理器控制台并运行以下命令

安装包Microsoft.ASPNet.WebAPI -pre


0

Web.config如上所述修改文件中的引用后,我们解析了引用。

我面临着类似的问题。

对于我们来说,我们从程序文件中获得了参考 Microsoft.Data.Edm.dll以及OData.dll其他程序集:

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                          \bin\.NETFramework\Microsoft.Data.Edm.dll

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                        \bin\.NETFramework\Microsoft.Data.OData.dll

和版本是5.6.4

一旦将两个程序集的引用都更改为C:\....Project\packages\Microsoft.Data.Edm.5.6.0,问题就解决了


0

进入nuget软件包管理器并更新了我的软件包。现在可以了。我更新的主要文件是Microsoft.AspNet.WebApi.Core。可能需要对两个项目都执行此操作,以同步正确的引用。


0

如果发生此问题,请在以下部分中检查web.config

以下部分提供了所使用的特定dll的版本

在web.config中检查此部分后,打开解决方案资源管理器并从项目树中选择引用,如图所示。解决方案资源管理器->参考

扩展引用后,找到导致错误的dll。右键单击dll参考,然后检查版本,如上图所示。

如果配置dll版本和引用的dll版本都不相同,则会出现此异常。确保两者的版本相同,这将有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.