发布到Azure网站后,无法加载文件或程序集System.Web.Http.WebHost

我创build了一个Web项目,并在Visual Studio中运行良好。 但是,在将其发布到azurewebsites后,我得到了以下错误。 什么可以导致这个问题?

无法加载文件或程序集“System.Web.Http.WebHost,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其某个依赖项。 定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的exception:0x80131040)

说明:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪,了解有关错误的更多信息以及源代码的位置。

exception详细信息:System.IO.FileLoadException:无法加载文件或程序集“System.Web.Http.WebHost,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其依赖项之一。 定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的exception:0x80131040)

源错误:

在执行当前Web请求期间生成未处理的exception。 有关exception的来源和位置的信息可以使用下面的exception堆栈跟踪来标识。

程序集加载跟踪:以下信息可以帮助确定程序集“System.Web.Http.WebHost,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”无法加载的原因。

警告:程序集绑定日志logging被closures。 要启用程序集绑定失败日志logging,请将registry值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1.注意:与程序集绑定失败日志logging相关的性能损失。 要closures此function,请删除registry值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

以下是web.config文件的一部分。

<system.web> <customErrors mode="Off"/> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="2880" /> </authentication> <pages> <namespaces> <add namespace="System.Web.Helpers" /> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization" /> <add namespace="System.Web.Routing" /> <add namespace="System.Web.WebPages" /> </namespaces> </pages> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers></system.webServer> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" /> <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" /> <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> 

在发布(已部署的环境)中缺lessdll 。 这就是为什么它在本地即Visual Studio中工作的原因,而不是在Azure网站环境中。

只需在程序集( System.Web.Http.WebHost )的属性中执行Copy Local = true ,然后重新部署,它应该可以正常工作。

如果你得到类似的错误,即其他程序集丢失,那么使该程序集copylocal = true并重新部署,重复迭代 – 如果你不确定其依赖关系。

如果你仍然在寻找答案,请尝试检查这个问题的线程 。 它帮助我解决了类似的问题。

编辑:帮助我的解决scheme是从PathOSchildbuild议从NugGet包pipe理器运行Update-Package Microsoft.AspNet.WebApi -reinstall安装。 然后,我不得不删除我的.suo文件,并重新启动VS,在这个线程谢尔盖Osypchukbuild议。

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

 System.Web.Http.dll System.Web.Http.WebHost.dll System.Net.Http.Formatting.dll 

我必须补充说我使用MVC4和NET 4

对于我来说,将以下部分添加到web.config文件中:

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

这个例子代表MVC 5.1。 希望能帮助别人解决这个问题。

对于我来说,它在“发布”对话框中的“设置”下的“文件发布选项”中select“在目的地删除其他文件”

在发布(已部署的环境)中缺lessdll。 这就是为什么它在本地即Visual Studio中工作的原因,而不是在Azure网站环境中。

只需在程序集(System.Web.Http.WebHost)的属性中执行Copy Local = true,然后重新部署,它应该可以正常工作。

我正在使用vs2012,我认为更新KB2781514改变了一些设置。 我在我的MVC4项目中的所有System.Web.Http更改为false,并保持收到此消息。 我已经在发布属性中更改了All file in this project中的All file in this project但是它不工作。 最后我必须逐个更改Copy Local = true并解决这个问题。

我得到了同样的错误,我把我的版本从4更改为3,它被解决了:

 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <!-- Ensure correct version of MVC --> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> </dependentAssembly> </assemblyBinding> 

我的应用程序中有同样的问题。

 System.web.http.webhost not found. 

您只需要将您在Visual Studio中运行的主项目中的system.web.http.webhost文件复制并粘贴到已发布的项目bin目录中即可。

在此之后,它可能会显示相同的错误,但目录名称已更改它可能是system.web.http 。 按照上述相同的步骤。 它将在所有file upload后生效。 这是由于在Visual Studio中的nuget包,他们从互联网上下载,但在服务器上无法下载。

你可以在你的项目bin目录下find这个文件。

我错过了几个DLL。 即使我手动将它们复制到目录下一次我发布他们会消失。 每个人都已经设置为VS本地复制。 对我的修复是设置每个复制本地虚假,保存,build立,然后设置每个复制本地真实。 这次我发布了所有正确发布的DLL。 奇怪

如果您的解决scheme中有多个项目,并且您的某个项目由于此错误而无法生成,请确保已在该项目中安装了WebApi Core nuget包。 简单地添加一个对System.Web.Http的引用没有帮助,你需要在该项目中安装正确的nuget包。

我的解决scheme中有多个项目,WebApi Core已经安装在另一个项目中。 我通过右键单击并从列表中勾选程序集来引用System.Web.Http程序集,并且它在Azure上不起作用,尽pipe在本地它将构build好。 我必须删除手动引用,并将WebApi Core nuget包添加到需要程序集引用的每个项目。

如果“复制本地”已经为True,我发现它有时可以工作,如果你删除已发布的文件并重新发布。

例如,如果您使用的是IIS,请删除网站及其发布到的目录的内容,然后重新发布。

在目的地可能有较旧版本的文件,所以为了确保您没有使用旧版本,请在再次发布之前删除所有文件。

这发生在VS2013(Update 5)/ASP.NET 4.5的项目types“Web Application”下,包括MVC和Web API 2.在创build项目之后以及添加任何代码之前发生错误。 添加下面的configuration为我解决它。 解决“System.Web.Helpers”问题后,出现了两个类似的错误“System.Web.Mvc”和“System.Web.WebPages”。

 <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly>