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

Posted

技术标签:

【中文标题】无法使用 ASP.NET (MVC 4) Web API OData Prerelease 加载文件或程序集 System.Net.Http,版本 = 4.0.0.0【英文标题】:Could not load file or assembly System.Net.Http, Version=4.0.0.0 with ASP.NET (MVC 4) Web API OData Prerelease 【发布时间】:2013-09-29 17:34:46 【问题描述】:

问题

安装 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 框架 4.5

我需要这个 nuget package 到 implement PATCH using the Delta class (当我使用 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, 处理器架构=MSIL

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

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

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

我尝试过的事情

我尝试在 Web.config 中将重定向 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$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

【问题讨论】:

也许这个答案可以帮助你:***.com/a/18700279/795876 【参考方案1】:

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

Below section gives the version of particular dll used

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

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

如果配置 dll 版本和引用的 dll 不同,您将收到此异常。确保两者的版本相同。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

我也遇到过类似的问题。

对于我们,我们有参考 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 后,问题就解决了

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

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

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

安装包 Microsoft.ASPNet.WebAPI -pre

【讨论】:

【参考方案6】:

当我尝试从项目模板更新 Hot Towel 项目时,以及截至 2013 年 10 月 23 日在 VS 2012 中创建一个空项目并通过 nuget 安装 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>

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

【参考方案8】:

我通过使用 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 - Accessing GlobalConfiguration throws Security Error

【讨论】:

这对我有用 - 由于更新了 system.net.http 依赖关系,我在安装最新的 CORS web api 包时遇到了同样的问题。 你这个摇滚人,非常感谢。在我的情况下,nuget restore 没有更新网络配置,我在部署后手动进行了更新。 同样,这会得到 +1,因为当 VS 不为您执行此操作时,您需要此答案才能自己进行绑定。【参考方案9】:

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

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

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

【讨论】:

这也为我解决了这个问题 - 但是,我真的很想知道这究竟意味着什么?【参考方案10】:

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

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

要解决此问题,请右键单击参考列表中的程序集并选择“属性”。通过查看“版本”属性来检查这是否是最新版本。如果是,请将“复制本地”切换为 true。

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

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

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

【讨论】:

【参考方案11】:

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

更多详情请见http://msdn.microsoft.com/en-us/library/2fc472t2.aspx。

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

【讨论】:

我希望我能投票 10 次。让 VS 自动执行此操作很好。谢谢你的提示! 不幸的是,它并不总是有效。事实上,我经常说,双击这个警告没有任何作用。 您必须签出正在修改的 web/app 配置。在这种情况下,无论出于何种原因,VS 似乎都不愿意为您检查文件。【参考方案12】:

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

【讨论】:

【参考方案13】:

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

【讨论】:

以上是关于无法使用 ASP.NET (MVC 4) Web API OData Prerelease 加载文件或程序集 System.Net.Http,版本 = 4.0.0.0的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4,Web API - 404 未找到

ASP.NET 5 MVC:无法连接到 Web 服务器“IIS Express”

ASP.NET Core 2.1 MVC - 无法设置从 Web api 响应接收到的 cookie

使用成员资格提供程序的 ASP.NET MVC 4 Web API 身份验证

ASP.NET MVC 4 Web API

从 ASP.NET MVC 项目调用 .NET CORE 5 Web API 微服务时无法检索 BadRequest 错误