无法使用 ASP.NET (MVC 4) Web API OData 预发布加载文件或汇编 System.Net. Http,Version = 4.0.0.0

问题

在安装了 NET Web API OData 包5.0.0-rc1预发行版之后,我得到了以下例外:

无法加载文件或程序集“ System.Web.Http,版本 = 4.0.0.0, 区域性 = 中性,PublicKeyToken = 31bf3856ad364e35’或其中一个 定位的程序集的清单定义没有 匹配程序集引用(来自 HResult T: 0x80131040的异常)

我的 MVC 4项目是全新的,真的很小,没什么特别的,我的目标是.NET 框架4.5

我需要这个 Nuget 套餐来使用 Delta 类实现 PATCH (当我使用包的4.0.0.0版本时,Delta 类无法工作)。

我该怎么补救?

我的 System.Web.Http 版本

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

Gacutil-l System.Web.Http 全局程序集缓存包含 下列程序集: System.Web.Http,Version = 5.0.0.0, 文化 = 中立,PublicKeyToken = 31bf3856ad364e35, ProcessorArchitecture = MSIL

视觉工作室中,当我浏览程序集时,System.Web.Http 的给定版本是 4.0.0.0(为什么?)

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

  • 有版本 5.0.0
  • 指向包的 lib net45文件夹
  • 有 CopyLocal = true

我尝试过的事情

我尝试在 Web.config 中将 redirect v4.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 _ _ cachedAnonymous ousMethodgenerate2” 失败了。

我想 V4.0.0真的需要核心 Web Api 引擎使用。

连环问题

代码分析错误在 MVC4 Web API 中无法加载文件或程序集 无法在 MVC4 Web API 中加载文件或程序集

161469 次浏览

我通过使用 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

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

我想就是这样了

注: 解决方案的灵感来自 WebAPI OData 5.0 Beta-AccessGlobalConfiguration 抛出安全错误

删除系统。韦伯。网站及系统。网。哈哈。通过浏览 bin 文件夹(由 nuget 复制到该文件夹)格式化引用,并将引用添加回来,现在文件版本为5.0.0.0

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

VisualStudio2013有一个新特性来处理这个问题。在构建应用程序时,应该会看到关于引用的程序集的不同版本的警告。双击警告将程序集绑定重定向到 web.config。

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

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

或者你可以在 NuGet 软件包管理器控制台上完成

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

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

我最终发现,当我要构建时,在我的 bin 文件夹中已经有了 System.web.mvc 二进制程序集的副本。

要解决这个问题,右键单击引用列表中的程序集并选择“ properties”。通过查看“ Version”属性检查这是否是最新版本。如果是,请将“ CopyLocal”切换为 true。

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

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

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

我遇到了同样的问题,我通过将 CopyLocal 设置为 true 来解决这个问题:

System.Web.Http.dll
System.Web.Http. WebHost.dll
System. Net. Http. Formating.dll

我必须补充的是,我使用 MVC4和 NET 4

我也犯了同样的错误。当我安装 Unity 框架用于依赖注入时,在我的配置中添加了新的对 Http 和 HttpFormatter 的引用。以下是我遵循的步骤。

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

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

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

转到 Tools —— > Library Package Manager —— > Package Manager Console 并运行以下命令

Install-Package Microsoft.ASPNet.WebAPI-pre

我解决的方式 nuget。第一个你安装 nuget。 一旦你使用。
插图如下:

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

最后: 你再检查一下项目有没有最新的版本。

在修改了上面提到的 Web.config文件中的 References 之后,我们解决了引用问题。

我也遇到过类似的问题。

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

进入 Nuget 软件包管理器并更新了我的软件包。现在成功了。我更新的主要是微软。AspNet.WebApi.核心。可能需要对这两个项目执行此操作,以同步适当的引用。

如果出现此问题,请在下面的小节中检查 web.config

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

在 web.config 中检查此部分之后,打开解决方案资源管理器,并从项目树中选择 reference,如下所示

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

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