81

问题

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

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

我的 MVC 4 项目是全新的,非常小,没什么特别的。我的目标是 .NET 框架 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, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=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' 失败。

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

相关问题

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

4

13 回答 13

164

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

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

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

于 2013-10-31T16:56:21.037 回答
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 会引发安全错误

于 2013-09-24T15:09:58.050 回答
11

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

为了解决这个问题,我通过 Nuget 将 Web Api Web Host 和 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>
于 2013-10-23T16:08:01.763 回答
11

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

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

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

于 2014-12-17T14:34:03.060 回答
8

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

于 2013-12-17T20:33:19.433 回答
4

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

于 2013-10-18T01:38:12.423 回答
1

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

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

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

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

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

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

于 2014-10-21T19:53:18.790 回答
1

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

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

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

于 2016-09-29T06:09:21.023 回答
1

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

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

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

于 2015-09-30T14:40:52.583 回答
1

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

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

安装包 Microsoft.ASPNet.WebAPI -pre

于 2016-03-02T07:11:01.250 回答
0

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

我面临着类似的问题。

对我们来说,我们有 来自 Program Files 的参考和其他程序集Microsoft.Data.Edm.dllOData.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,问题就解决了

于 2017-01-21T11:56:35.690 回答
0

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

于 2017-04-11T14:49:11.843 回答
0

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

以下部分给出了使用的特定 dll 的版本

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

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

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

于 2017-05-22T11:33:09.003 回答