从 2012 年到 2013 年更新后无法加载文件或程序集“System.Web.Http 4.0.0”

Posted

技术标签:

【中文标题】从 2012 年到 2013 年更新后无法加载文件或程序集“System.Web.Http 4.0.0”【英文标题】:Could not load file or assembly 'System.Web.Http 4.0.0 after update from 2012 to 2013 【发布时间】:2013-10-29 18:54:54 【问题描述】:

我做了升级根据。 http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

我得到了错误。其他人有这个错误吗?

“/”应用程序中的服务器错误。

无法加载文件或程序集 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040) 说明:执行过程中发生未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.IO.FileLoadException:无法加载文件 或程序集 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)

来源错误:

第 48 行:第 49 行:第 50 行: 行 51:第 52 行:受保护的无效 Application_BeginRequest(对象 发件人,EventArgs e)

源文件: d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs 行: 50

装配负载跟踪:以下信息可能有助于 确定为什么程序集 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 无法加载。

=== 预绑定状态信息 === LOG: DisplayName = System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (完全指定)日志:Appbase = file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG:初始 PrivatePath = D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin 调用程序集:ThirdPartyWebAPI,Version=1.0.0.0,Culture=neutral, PublicKeyToken=null。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件: D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\web.config 日志:使用 主机配置文件: C:\Users\michalc\Documents\IISExpress\config\aspnet.config 日志:使用 机器配置文件来自 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config。 LOG:后策略参考:System.Web.Http,Version=4.0.0.0, 文化=中性,PublicKeyToken=31bf3856ad364e35 日志:正在尝试 下载新网址 file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET 文件/root/9184b2ea/c6d4b139/System.Web.Http.DLL。日志: 正在尝试下载新 URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET 文件/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL。日志: 正在尝试下载新 URL file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。 警告:比较程序集名称导致不匹配:主要 版本 ERR:无法完成程序集设置 (hr = 0x80131040)。 探测终止。

堆栈跟踪:

[FileLoadException: 无法加载文件或程序集 'System.Web.Http, 版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或 它的依赖项之一。定位程序集的清单定义 与程序集引用不匹配。 (HRESULT 的例外情况: 0x80131040)]ThirdPartyWebAPI.WebApiApplication.Application_Start() 在 d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs:50

[HttpException (0x80004005): 无法加载文件或程序集 'System.Web.Http,版本=4.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)] System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+9935033 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext、HttpContext 上下文、MethodInfo[] 处理程序)+118 System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态, MethodInfo[] 处理程序、IntPtr appContext、HttpContext 上下文)+172 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+336 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): 无法加载文件或程序集 'System.Web.Http,版本=4.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)] System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文) +9913572 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+254


版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18408

【问题讨论】:

您是否尝试过重新添加对“System.Web.Http”的引用 【参考方案1】:

我通过reinstalling the NuGet package 修复了这个问题,它纠正了损坏的依赖关系。从包管理器中运行:

Update-Package Microsoft.AspNet.WebApi -reinstall

【讨论】:

在本地运行 Web 应用程序对我来说没问题 (F5),但是在部署到远程服务器(使用 WebDeploy)时,程序集没有复制到服务器。我不确定是否应该复制程序集。无论如何,在运行此命令后,所有必需的程序集都标有 copy-local=true 并且在部署应用程序后开始正常工作 只是为了添加更平衡的图片 - 这并没有解决我的问题。 确保将所需的更新添加到任何依赖项目,例如测试等。 我这样做了,它做了太多更改,但我注意到它调整了 web.config 中的绑定重定向,我放弃了它所做的所有其他更改,这对我有用。 现在我收到一个新错误:新版本是 Version=5.2.3.0,它需要 Version=4.0.0.0【参考方案2】:

要解决无法加载文件或程序集“System.Web.Http”错误,请使用 NuGet 安装 Web API 2.1 WebHost。

在解决方案资源管理器中的引用右键单击并选择管理 nuget 包。 (如果没有安装nuget)

在左侧的管理 NuGet 包窗口中单击在线,然后在右上角搜索 Web Host 并安装 Microsoft ASP.NET Web API 2.1 Web Host。 (安装后安装按钮将变为绿色对勾)

之后项目将重新加载,当它再次构建时,错误将得到解决,项目将调试并运行。错误将消失,您可能会“找不到资源。只需将 url ( ex from localhost:52088/ 附加到 localhost:52088api/products )

你的问题很好,帮助了我。

希望这个答案有帮助!

【讨论】:

感谢 Catto,它治愈了我很多。【参考方案3】:

您需要添加程序集重定向:

<configuration>

   ....

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

   ...

</configuration>

您很可能必须为更多的程序集(如虚拟主机等)执行此操作。

【讨论】:

我编辑了答案。出于某种原因,DLL 名称从 Castle Windsor 更改为 System.Web.Http 在未确保新程序集与前一个程序集二进制兼容的情况下,切勿添加二进制重定向。【参考方案4】:

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

【讨论】:

为我工作,只需安装 Install-Package Microsoft.AspNet.WebApi【参考方案5】:

当我安装 Web Api 2.2 时,帮助这个错误开始了。我将此添加到 web.config 中,它解决了我的问题。

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

【讨论】:

在发布到 Azure 时,在从一开始就是 Web Api 2.2 的项目上也是如此。该项目在本地运行良好,但在 Azure 上我收到了来自 OP 的错误。将这些行添加到 web.config 并重新发布到 Azure 修复它。【参考方案6】:

解决此问题的正确解决方案是按照以下步骤操作

。如果您有旧版本到 15.5.4,请更新 Visual Studio(可选)

    从 web.config 中删除所有绑定重定向

    将此添加到 csproj 文件中:

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

    构建。

    bin文件夹下应该有(WebAppName).dll.config文件。

    它应该有重定向。将这些复制到 web.config

    再次从csproj文件中删除上面的片段

    应该可以工作

Detailed Blog

【讨论】:

它不会创建所有的绑定【参考方案7】:

我只是在缺少的程序集上设置了Copy Local = true 并且有效。这当然是通过右键单击缺少的参考(在错误消息中说明)并选择属性来实现的;如下:

这应该可以解决一个问题,因为可能有不止一个程序集导致问题 - 我所做的是选择所有程序集并右键单击它们;选定的属性;并将它们全部设置为 Copy Local = true;然后重新发布。

【讨论】:

完美运行。我只需要在 System.Web.Http 和 System.Net.Http.Formatting 上执行“Copy Local = true”【参考方案8】:

对我来说,它只是在生产环境中崩溃,而不是在本地机器上;解决方法是删除 /bin 文件夹的内容,然后重新生成。

【讨论】:

这是人们应该检查的。我遇到了同样的问题。原来,我的应用程序前端有一个不必要的 Microsoft.AspNet.Cors dll。我在 prod 系统上删除了 bin 文件夹,重新发布了网站,然后变魔术了。【参考方案9】:

只是一个明显但可能有用的提示......请记住检查您在 webconfig 程序集绑定中指定的新版本是否与您在项目引用中引用的版本相同。 (即,当我写这篇文章时……如果您最近在 System.Web.Http 上完成了 NUGet,这将是 5.1.0.0

【讨论】:

【参考方案10】:
<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>

【讨论】:

【参考方案11】:
 Installing NuGet package ASP.NET.MVC solved the issue for me. 
 To install package.
 - Right click on project 
 - Select "Manage NuGet Packages"
 - Select Online->Nuget.org from left menu
 - select "Microsoft ASP.NET MVC"
 - Click Install

 If you have already installed package earlier, please update the package by selecting Updates from left menu and then selecting "Microsoft ASP.NET" and click Update.

【讨论】:

【参考方案12】:

这可能对某人有所帮助。

我决定使用 MVC4 应用程序。

运行项目,工作

然后安装了几个包,例如,Microsoft ASP.NET WEB API 2.2(4 个包) Microsoft ASP.NET WEB API 2.2 帮助页面Microsoft ASP.NET WEB API 2.2 OWIN

运行项目,与问题中提到的错误相同

解决方案:

web.config

 <dependentAssembly>
      <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.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.2.3.0" />
 </dependentAssembly>

问题已解决


然后,发现一些 hotfix 错误, 要解决它, 转到您的 MVC4 项目的 VIEW 文件夹, 找到second web.config 文件并将版本从 2.0.0.0 更改为 3.0.0.0 如下所示.


<configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

【讨论】:

【参考方案13】:

就我而言,我实际上完全错过了我的web.config,它具有适当的绑定重定向。恢复web.config 解决了这个错误。

【讨论】:

【参考方案14】:

我可以通过在主应用程序的 app.config 中添加程序集引用来解决 System.Net.HTTP 的类似问题。

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.0.0.0" />
      </dependentAssembly></runtime>

【讨论】:

【参考方案15】:

我发现删除 BIN 文件夹然后重建项目可以解决问题,而无需卸载/重新安装包。

【讨论】:

【参考方案16】:

我找到了解决方案!删除项目目录下名为 package 的文件夹,然后重新构建运行。

【讨论】:

【参考方案17】:

是的!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

在我的情况下它工作正常....thnkz

【讨论】:

这只是 existing answer 的副本。看来您没有其他要添加的内容了,请考虑删除此内容。【参考方案18】:

我什么都没做,只是将开发 Bin 文件夹 DLLs 复制到在线部署的 Bin 文件夹中,对我来说效果很好。

【讨论】:

【参考方案19】:

我在使用发布功能部署到 Azure 时遇到了这个问题。 记得在目的地清除文件。

Publish Settings -&gt; File Publish Options drop down -&gt; Check Remove additional files at destination

这解决了我的问题,以防人们不得不像我一样四处寻找。我的项目/解决方案中的所有内容都是相同的版本,只是不在我要部署的目的地。

【讨论】:

【参考方案20】:

我在 System.Web.Http.WebHost 中遇到了同样的问题,引用了 Version=5.2.6.0,但最新的 NuGet 包是 5.2.7.0。我编辑了 web.config 文件,重新安装了 NuGet 包,然后为我的所有项目编辑了 Visual Studio 项目文件,以确保不保留对 5.2.6.0 的引用。即便如此,问题仍然存在。

然后,我在 bin 文件夹中查找引发异常的项目,在该文件夹中我找到了我的其他项目之一的 DLL,该项目不是依赖项,不应该存在。我删除了有问题的 DLL(使用 5.2.6.0 版本的 System.Web.Http.WebHost 编译),重新构建了麻烦的项目,现在它可以工作了。

【讨论】:

【参考方案21】:

正如其他人所说,只需使用 nuget 将 MVC 包重新安装到您的 Web 项目中,但请确保将 MVC 包添加到取决于 Web 项目的任何项目中,例如单元测试。如果您单独构建每个包含的项目,您会看到需要更新的项目。

【讨论】:

【参考方案22】:

我有同样的问题,重新安装包不起作用。

我的应用程序在 LocalIIS(不是 IIS EXPRESS)中运行。我启用了程序集加载跟踪并发现它想要从下面的临时捕获加载 System.Web.Http 加载。所以删除所有的catch文件夹

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files[我的应用程序]

【讨论】:

【参考方案23】:

我通过在运行 nuget 后还原 nuget 对我的 web.config 所做的更改来解决此问题。将更改恢复到以前的工作版本。

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>

【讨论】:

【参考方案24】:

为我解决问题的是重新安装 Microsoft ASP.NET Web API 2.2 帮助页面 和 Microsoft ASP.NET Web API 2.2 OWIN 软件包。我同时重新安装了两者,但我认为是前者解决了问题。

我尝试了这里提供的前几个解决方案,但没有帮助,然后我将我的依赖项与项目中有效的依赖项(来自 Pluralsight 的课程)进行了比较,上面的两个依赖项是较低版本( 5.0.0) 所以我将它们更新到 5.2.3 并开始工作。

【讨论】:

【参考方案25】:

我是从 WCF 服务获得的。对我来说(因为问题显示在本地开发中),我只需要删除解决方案下的 bin 文件夹的内容。重建工作再次正常。

【讨论】:

【参考方案26】:

ASP.NET Version:4.0.30319.18408 属于.Net4.5,System.Web.Http Version=4.0.0.0 兼容.NET4.0。因此,您拥有的版本不兼容。您应该将 System.Web.Http 更新到与 .Net4.5 兼容的 5.0.0.0 版本

【讨论】:

【参考方案27】:

我遇到了类似的问题。之前一切正常。它最初是使用 Web 表单制作的,后来为某些东西添加了 Web API。

尝试卸载、安装和重新安装 Microsoft.AspNet.WebApi 包。 尝试从解决方案中删除 packages 文件夹并让 NuGet 在 VS 中恢复。 尝试删除单个程序集引用(在引用下)并重新安装包。 尝试在几个答案中提到的 web.config 中添加绑定重定向到 5.2.3.0 版本。对我没有任何帮助。

有效的是,在 Visual Studio 中,将发布配置文件设置从“发布”更改为“调试”。奇怪,但这就是有效的。所以在这里分享。

【讨论】:

【参考方案28】:

如果您在一个解决方案上使用多个项目,并将一个项目中的方法调用到另一个项目,请确保所有项目(称为项目和调用者项目)使用唯一的'System.Net.Http'版本

【讨论】:

【参考方案29】:

将参考中的 dll 的特定版本标志从 true 更改为 false

【讨论】:

以上是关于从 2012 年到 2013 年更新后无法加载文件或程序集“System.Web.Http 4.0.0”的主要内容,如果未能解决你的问题,请参考以下文章

更新后,应用程序不会从 Documents 文件夹加载现有文件

Matlab 中的 Visual Studio 2012 编译器更新

SQL Server 通知

View Controller 更新后继续加载xib文件

2013 年发布后的 Visual Studio 2012 速成版在哪里?

Sharepoint Migration从2010年到仅限文档