从 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 -> File Publish Options drop down -> 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 编译器更新