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

时间:2013-09-24 13:14:38

标签: asp.net-mvc-4 asp.net-web-api odata assembly-resolution

问题

安装 Microsoft ASP.NET Web API OData软件包5.0.0-rc1 预发布后,我最终遇到以下异常:

  

无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个   依赖。定位程序集的清单定义没有   匹配程序集引用。 (HRESULT异常:0x80131040)

我的MVC 4项目是全新的,非常小,没什么特别之处。我的目标是.NET framework 4.5

我需要nuget packageimplement PATCH using the Delta class (当我使用软件包的4.0.0.0版时,Delta类无法正常工作)。

我该如何解决?

我的System.Web.Http

版本

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

  

gacutil -l System.Web.Http全局程序集缓存包含   以下程序集:System.Web.Http,Version = 5.0.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35,   ProcessorArchitecture用于= MSIL

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

my project 中,引用System.Web.Http

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

我尝试过的事情

我尝试在Web.config中将redirect v 4.0.0.0绑定到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 $&LT;&GT; 9__CachedAnonymousMethodDelegate2'   失败。

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

相关问题

Code Analysis error Could not load file or assembly 'System.Net.Http, Version=2.0.0.0 in MVC4 Web API Could not load file or assembly 'System.Net.Http, Version=2.0.0.0 in MVC4 Web API

13 个答案:

答案 0 :(得分:163)

Visual Studio 2013有一项新功能可以解决这个问题。构建应用程序时,您应该看到有关正在引用的程序集的不同版本的警告。双击警告以将程序集绑定重定向添加到web.config。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/2fc472t2.aspx

jeff.eynon在下面说明你需要检查web.config(如果使用TFS源代码控制)让VS自动编辑文件。谢谢你的提示!

答案 1 :(得分: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)将重定向绑定到5.0.0.0 for System.Web.Http和System.Net.Http.Formatting

<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 - Accessing GlobalConfiguration throws Security Error

的高度启发

答案 2 :(得分:11)

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

为了解决这个问题,我通过Nuget将Web Api Web主机和Web API包更新到5.0,目前是NuGet中的当前版本(2013年10月23日)。

然后我添加了绑定指示:

<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>

答案 3 :(得分:11)

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

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

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

答案 4 :(得分:8)

或者您可以从NuGet Package Manager控制台

执行此操作
 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

然后你就可以添加对System.Web.Http.WebHost 5.0的引用

答案 5 :(得分:4)

从您的引用中删除System.Web.Http和System.Net.Http.Formatting并通过浏览到bin文件夹(由nuget复制它们的位置)重新添加引用现在文件版本说5.0.0.0

答案 6 :(得分:1)

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

我最终想到的是,当我构建时,我的bin文件夹中已经存在system.web.mvc二进制程序集的副本。

要解决此问题,请右键单击引用列表中的程序集,然后选择&#34; properties&#34;。通过查看&#34;版本&#34;检查这是否是最新版本。属性。如果是,请切换&#34;复制本地&#34;为真。

这将确保项目中引用的版本是最终位于二进制文件夹中的版本。

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

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

答案 7 :(得分:1)

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

我在nuGet Package Manager控制台上运行了以下命令: PM&GT;安装包Microsoft.ASPNet.WebAPI -pre

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

答案 8 :(得分:1)

我通过nuget解决方法。你安装nuget的第一个。 你使用的第二个。
插图如下:

第三:通过查看&#34;版本&#34;检查这是否是最新版本。属性。

最终:你检查项目是否有最新版本。

答案 9 :(得分:0)

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

转到工具 - &gt;库包管理器 - &gt;包管理器控制台并运行以下命令

安装包Microsoft.ASPNet.WebAPI -pre

答案 10 :(得分:0)

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

我遇到了类似的问题。

对于我们,我们引用了Microsoft.Data.Edm.dllOData.dll以及Program Files中的其他程序集:

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后,问题已解决

答案 11 :(得分:0)

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

答案 12 :(得分:0)

如果出现此问题,请查看以下部分中的web.config

Below section gives the version of particular dll used

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

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

如果config dll版本和引用的dll都不同,您将获得此异常。确保两者都是相同的版本,这将有所帮助。