我创建了一个web项目,它在Visual studio中运行良好。然而,在将它发布到azurewebsites站点后,我得到了以下错误。是什么导致了这个问题?
无法加载文件或程序集“System.Web.Http.WebHost,Version=5.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT异常: 0x80131040)
说明:当前web请求执行过程中发生未处理异常。请查看堆栈跟踪,以了解有关错误的更多信息以及错误在代码中的来源。
异常详细信息: System.IO.FileLoadException:无法加载文件或程序集“”System.Web.Http.WebHost,Version=5.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35“”或其依赖项之一。“找到的程序集的清单定义与程序集引用不匹配。(HRESULT异常: 0x80131040)
源错误:
在执行当前web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的来源和位置的信息。
程序集加载跟踪:以下信息有助于确定无法加载程序集“System.Web.Http.WebHost,Version=5.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”的原因。
警告:程序集绑定日志记录已关闭。若要启用程序集绑定失败日志记录,请将注册表值HKLM\Software\Microsoft\Fusion!EnableLog设置为1。注意:程序集绑定失败日志记录会带来一些性能损失。若要关闭此功能,请删除注册表值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>
发布于 2013-12-02 15:43:18
已发布(已部署的环境)中缺少dll
。这就是为什么它在本地即Visual Studio中工作,而不是在Azure网站环境中工作的原因。
只需在assembly(System.Web.Http.WebHost)的属性中执行Copy Local = true
,然后进行重新部署,它应该会工作得很好。
如果您得到类似的错误,即缺少其他程序集,则将该程序集设置为copylocal=true并重新部署,反复重复此操作-如果您不确定其依赖关系。
发布于 2014-10-30 04:04:00
如果您仍在寻找答案,请尝试检查此question thread。它帮助我解决了一个类似的问题。
编辑:根据Pathoschild的建议,帮助我的解决方案是从NugGet包管理器运行Update-Package Microsoft.AspNet.WebApi -reinstall
。然后我不得不删除我的.suo文件并重启VS,正如this thread中的Sergey Osypchuk所建议的那样。
发布于 2014-12-17 22:30:28
我遇到了同样的问题,我通过将以下库的CopyLocal
设置为true来解决它:
System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll
我必须补充一点,我使用MVC4和NET4
https://stackoverflow.com/questions/20323107
复制相似问题