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

我按照。 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 < / p >

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

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

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

Exception Details: System.IO.FileLoadException: Could not load file 或者组装System.Web。Http,版本=4.0.0.0,区域性=中性, PublicKeyToken=31bf3856ad364e35'或其依赖项之一。的 定位程序集的清单定义与该程序集不匹配 参考。(异常来自HRESULT: 0x80131040)

源错误:

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

< p >源文件: d: \ SM \ 7.4 \ WebAPIServerV2 \ ThirdPartyWebAPI \测试Global.asax.cs线: 50 < / p >

程序集负载跟踪:以下信息可能有助于 确定为什么程序集` System.Web。Http、Version = 4.0.0.0

. Culture=neutral, PublicKeyToken=31bf3856ad364e35'无法加载

===预绑定状态信息=== LOG: DisplayName = System.Web。Http,版本=4.0.0.0,文化=中立,PublicKeyToken=31bf3856ad364e35 (全指定)LOG: Appbase = ///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: Initial . LOG . LOG:初始化 PrivatePath = D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin 调用程序集:ThirdPartyWebAPI,版本=1.0.0.0,区域性=中性, 都必须为空。 === LOG:该绑定在默认加载上下文中启动。日志:使用应用程序配置文件: D: \ SM \ 7.4 \ WebAPIServerV2 \ ThirdPartyWebAPI \ web测试。配置日志:正在使用 主机配置文件: C:\Users\michalc\Documents\IISExpress\config\aspnet.配置日志:正在使用 机器配置文件 C:\Windows\ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config。 日志:策略后引用:System.Web。Http、Version = 4.0.0.0 Culture=neutral, PublicKeyToken=31bf3856ad364e35 LOG:尝试中 下载新网址 file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP。网络文件/根/ 9184 b2ea / c6d4b139 / System.Web.Http.DLL。日志: 正在下载新的URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP。网 文件/根/ 9184 b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL。日志: 正在下载新的URL 文件:/ / / D: / SM / 7.4 / WebAPIServerV2 / ThirdPartyWebAPI / bin / System.Web.Http.DLL测试。 WRN:比较程序集名称导致不匹配:Major 版本ERR:未能完成程序集设置(hr = 0x80131040)。 调查终止。< / p >

堆栈跟踪:

[FileLoadException: cannot load file or assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'或 它的依赖项之一。定位程序集的清单定义 与程序集引用不匹配。(HRESULT的异常: 0 x80131040)] ThirdPartyWebAPI.WebApiApplication.Application_Start () 在d: \ SM \ 7.4 \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs测试:50 < / p >

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

[HttpException (0x80004005):无法加载文件或程序集 包含。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 context) +254


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

407612 次浏览

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

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

最有可能的是,你必须这样做一些更多的程序集,如网络托管等。

或者你可以从NuGet包管理器控制台这样做

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

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

我通过重新安装NuGet包修复了这个问题,它纠正了损坏的依赖关系。在包管理器中运行:

Update-Package Microsoft.AspNet.WebApi -reinstall

解决“无法加载文件或程序集”的问题。Http错误使用NuGet安装Web API 2.1 WebHost。

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

enter image description here

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

在此之后,项目将重新加载,当它再次构建时,错误将被解决,项目将调试并运行。错误将消失,您可能会发现“无法找到资源”。只需追加url(例如从localhost:52088/到localhost:52088api/products)

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

希望这个答案能有所帮助!

当我安装Web Api 2.2帮助时,这个错误开始了。我把这个放到网上了。配置,它解决了我的问题。

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

正如其他人所说,只需使用nuget将MVC包重新安装到您的web项目中,但一定要根据web项目将MVC包添加到任何项目中,例如单元测试。如果您单独构建每个包含的项目,您将看到哪些项目需要更新。

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

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

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

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

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

我通过恢复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>
 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.

enter image description here

enter image description here

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

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

这可能会帮助到某些人。

我决定用MVC4 app。

运行项目,工作 < br >

然后安装了几个软件包,如
Microsoft ASP。NET WEB API 2.2(4个包)
微软的ASP。NET WEB API 2.2帮助页 < br > 微软的ASP。NET WEB API 2.2 OWIN

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

解决方案:

< em > web . config < / em >

 <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>
< p > < br > 问题解决了< / >强


但随后发现一些< em >热修复补丁< / em >错误, 为了解决这个问题, 转到MVC4项目的< em > < / em >视图文件夹, 找到second < em > web . config < / em >文件并将版本从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>

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

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

enter image description here

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

在我的情况下,我实际上完全丢失了web.config,它具有适当的绑定重定向。恢复web.config解决了错误。

ASP。NET Version:4.0.30319.18408属于。NET 4.5, System.Web.Http Version=4.0.0.0兼容于。NET4.0。所以你的版本是不兼容的。您应该将System.Web.Http更新到5.0.0.0版本,这与.Net4.5兼容

我没有什么,只是复制开发箱子文件夹dll到在线部署的箱子文件夹,它对我来说工作得很好。

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

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

  • 尝试卸载、安装和重新安装Microsoft.AspNet.WebApi包。
  • 尝试从解决方案中删除包文件夹,并让NuGet在VS中恢复。
  • 尝试删除各个程序集引用(在references下)并重新安装包。
  • 尝试在web中添加绑定重定向到5.2.3.0版本。在几个回答中提到的配置。对我来说什么都没用。

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

我在使用发布功能部署到Azure时遇到了这个问题。

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

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

解决此问题的正确方法是遵循以下步骤

. 如果您的Visual studio版本较旧,请更新到15.5.4(可选)

  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

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

如果你使用唯一的'System.Net.Http'版本,并调用方法在一个项目到另一个项目,确保所有的项目(被调用的项目和调用的项目)使用唯一的'System.Net.Http'版本

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

我在System.Web.Http上也遇到了同样的问题。WebHost, Version=5.2.6.0被引用,但最新的NuGet包是5.2.7.0。我编辑网页。重新安装NuGet包,然后编辑所有项目的visual studio项目文件,以确保没有对5.2.6.0的引用持续存在。即便如此,问题依然存在。

然后我在bin文件夹中寻找抛出异常的项目,在那里我发现了我的另一个项目的DLL,它不是一个依赖项,不应该在那里。我删除了有问题的DLL(它是使用System.Web.Http.WebHost的5.2.6.0版本编译的),重新构建了有问题的项目,现在它正在工作。

我发现删除BIN文件夹,然后重新构建项目解决了这个问题,而不必卸载/重新安装包。