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


183

我做了升级。 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,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)
说明:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.IO.FileLoadException:无法加载文件或程序集'System.Web.Http,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)

源错误:

行48:行49:行50:}行51:行52:受保护的void Application_BeginRequest(对象发送者,EventArgs e)

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

程序集加载跟踪:以下信息有助于确定为什么无法加载程序集'System.Web.Http,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'。

===预绑定状态信息===日志:DisplayName = System.Web.Http,版本= 4.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35(完全指定)日志:Appbase = file:/// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/日志:初始PrivatePath = D:\ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ bin调用程序集:ThirdPartyWebAPI,版本= 1.0.0.0,文化=中性,PublicKeyToken =空。=== 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中的文件。日志:政策后参考:System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http.DLL。日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http .DLL。日志:尝试下载新的URL文件:/// D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。WRN:比较程序集名称会导致不匹配:主要版本ERR:无法完成程序集的设置(hr = 0x80131040)。探测终止。尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL 。日志:尝试下载新的URL文件:/// D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。WRN:比较程序集名称会导致不匹配:主要版本ERR:无法完成程序集的设置(hr = 0x80131040)。探测终止。尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL 。日志:尝试下载新的URL文件:/// D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。WRN:比较程序集名称会导致不匹配:主要版本ERR:无法完成程序集的设置(hr = 0x80131040)。探测终止。无法完成装配的设置(hr = 0x80131040)。探测终止。无法完成装配的设置(hr = 0x80131040)。探测终止。

堆栈跟踪:

[FileLoadException:无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)d:\ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs:50中的ThirdPartyWebAPI.WebApiApplication.Application_Start()

[HttpException(0x80004005):无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,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,Version = 4.0.0.0,Culture = neutral,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'的引用
Izikon

4
请将答案标记为已接受。
Aliostad

Answers:


288

我通过重新安装NuGet软件包来解决此问题,该软件包可以纠正损坏的依赖关系。在包管理器中,运行:

Update-Package Microsoft.AspNet.WebApi -reinstall

1
对我来说,可以在本地运行Web应用程序(F5),但是在部署到远程服务器(使用WebDeploy)时,程序集未复制到服务器。我不确定程序集是否应该被复制。无论如何,运行此命令后,所有必需的程序集都标记为copy-local = true,并且在部署该应用程序后即可正常运行
Guillermo Ruffino 2014年

3
只是添加一个更加平衡的图片-这并不能解决我的问题。
Lewray 2014年

2
确保将所需的更新添加到任何相关项目(例如测试等
。– DeeArgee 2015年

我做了这个,它做了太多更改,但是我确实注意到它调整了web.config中的绑定重定向,我放弃了它所做的所有其他更改,这对我有用。
Myster

现在我遇到了一个新错误:新版本为Version = 5.2.3.0,它期望的Version = 4.0.0.0
Yar

84

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

在解决方案资源管理器中的引用上单击鼠标右键,然后选择“管理nuget程序包”。(如果不存在,请安装nuget)

在此处输入图片说明

在左侧的“管理NuGet程序包”窗口中,单击联机,然后在右上角搜索Web Host并安装Microsoft ASP.NET Web API 2.1 Web Host。(安装后,安装按钮将变为绿色复选标记)

之后,该项目将重新加载,并且在再次构建时,该错误将得到解决,并且该项目将调试并运行。错误将消失,并且您可能是:'找不到资源。只需附加网址(例如从localhost:52088 /到localhost:52088api / products)

您的问题很好,对我有帮助。

希望这个答案有帮助!


谢谢卡托,它使我受益匪浅。
Saurabh Soni 2015年

61

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

<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
Aliostad 2013年

7
在确保新程序集与先前程序集二进制兼容之前,切勿添加二进制重定向。
GETah 2015年

18

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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


为我工作,只需安装Install-Package Microsoft.AspNet.WebApi
Djama

17

当我安装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>

1
发布到Azure时,从一开始就是Web Api 2.2的项目在这里也是一样。该项目在本地运行良好,但是在Azure上,我从OP中得到了错误。将这些行添加到web.config并重新发布到Azure可以修复该问题。
AronVanAmmers

4

我只是设置Copy Local = true缺少的程序集就可以了。当然,这是通过右键单击丢失的引用(错误消息中已说明)并选择属性来实现的。如下:

在此处输入图片说明

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


1
工作完美。我只需要在System.Web.Http和System.Net.Http.Formatting上执行“ Copy Local = true”
Sandip Subedi

4

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

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

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

  2. 将此添加到csproj文件:

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
  1. 建立。

  2. 在bin文件夹中,应该有一个(WebAppName).dll.config文件。

  3. 它应该具有重定向。将它们复制到web.config

  4. 再次从csproj文件中删除以上内容

  5. 它应该工作

Detailed Blog


它不会创建所有绑定
batmaci

3

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


人们应该检查一下。我有同样的问题。原来,我的应用程序前端没有Microsoft.AspNet.Cors的dll。我在生产系统上删除了bin文件夹,重新发布了网站,然后变魔术了。
罗恩

2

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


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

在此处输入图片说明

在此处输入图片说明


2

这可能会帮助某人。

我决定使用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>


问题解决了


但是,然后发现了一些修补程序错误,要解决该问题,请转到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>


2

就我而言,我实际上web.config完全错过了我,他们拥有适当的绑定重定向。恢复已web.config解决的错误。


2

我可以通过在主应用程序的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>

1

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


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

1

是!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

就我而言,它工作正常。


2
这只是现有答案的重复。似乎您没有其他要添加的内容,请考虑删除此内容。
zzzzBov


0

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


0

我遇到了同样的问题,重新安装软件包无法正常工作。

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

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ ASP.NET临时文件[我的应用程序]


0

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

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

0

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

我尝试了此处提供的前几个解决方案,但没有帮助,然后我将自己的依赖项与一个有效项目中的依赖项进行了比较(来自Pluralsight的课程),并且上面的两个依赖项是一个较低的版本(5.0.0) ),因此我将其更新为5.2.3,然后开始工作。


0

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


0

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


0

我有一个类似的问题。之前一切正常。它最初是使用Web窗体制作的,后来在添加的Web API上做了一些事情。

  • 尝试卸载,安装和重新安装Microsoft.AspNet.WebApi程序包。
  • 尝试从解决方案中删除程序包文件夹,并让VS中的NuGet还原。
  • 尝试删除单个程序集引用(在“引用”下)并重新安装软件包。
  • 尝试在多个答案中提到的在web.config中将绑定重定向添加到5.2.3.0版本。什么都没有为我工作。

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


0

使用发布功能部署到Azure时遇到此问题。记住要清除目标位置的文件。

Publish Settings -> File Publish Options drop down -> Check Remove additional files at destination

这解决了我的问题,以防人们像我一样四处寻找。一切都在我的项目/解决方案中是相同的版本,而不是在我要部署到的目标位置。


0

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


0

对于引用中的dll,将Specfic版本标志从true更改为false


0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.