Не удалось загрузить файл или сборку System.Web.Http.WebHost после публикации на веб-сайте Azure
Я создал веб-проект и хорошо работает в Visual Studio. Тем не менее, я получил следующую ошибку после публикации ее в azurewebsites. Что может вызвать проблему?
Не удалось загрузить файл или сборку "System.Web.Http.WebHost, Версия = 5.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одной из его зависимостей. Установленное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Описание: Необработанное исключение произошло во время выполнения текущий веб-запрос. Просмотрите трассировку стека информацию об ошибке и где она возникла в коде.
Сведения об исключении: System.IO.FileLoadException: не удалось загрузить файл или сборка 'System.Web.Http.WebHost, Version = 5.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. установленное определение манифеста сборки не соответствует сборке Справка. (Исключение из HRESULT: 0x80131040)
Ошибка источника:
Необработанное исключение было создано во время выполнения текущий веб-запрос. Информация о происхождении и местонахождении исключение может быть идентифицировано с использованием трассы стека исключений ниже.
След загрузки сборок: следующая информация может быть полезна для определить, почему сборка" System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'не может быть загружен.
WRN: Регистрация привязки сборки отключена. Чтобы включить сборку регистрация сбоев, установить значение реестра [HKLM\Software\Microsoft\Fusion! EnableLog] (DWORD) на 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>
Ответы
Ответ 1
В опубликованной (развернутой среде) отсутствует dll
. Именно по этой причине он работает в локальной, то есть Visual Studio, но не в среде веб-сайта Azure.
Просто выполните Copy Local = true
в свойствах сборки (System.Web.Http.WebHost), а затем выполните повторное развертывание, оно должно работать нормально.
Если вы получите аналогичную ошибку, то есть какая-то другая сборка отсутствует, сделайте эту сборку copylocal = true и передислоцируйте, повторите ее итеративно - если вы не уверены в ее зависимостях.
Ответ 2
Если вы все еще ищете ответ, попробуйте проверить этот вопрос. Это помогло мне решить аналогичную проблему.
изменить:
Решение, которое помогло мне, состояло в том, чтобы запустить Update-Package Microsoft.AspNet.WebApi -reinstall
из диспетчера пакетов NugGet, как это было предложено Pathoschild.
Затем мне пришлось удалить файл .suo и перезапустить VS, как предложил Сергей Осыпчук в этой теме.
Ответ 3
Я встретил ту же проблему, и я разрешил ее, установив CopyLocal
в true для следующих библиотек:
System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll
Я должен добавить, что я использую MVC4 и NET 4
Ответ 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. Надеюсь, что это поможет кому-то решить эту проблему.
Ответ 5
Для меня он начал работать после выбора "Удалить дополнительные файлы в месте назначения" в параметрах публикации файла под настройками в диалоговом окне публикации.
Ответ 6
В опубликованной (развернутой среде) отсутствует dll. Именно по этой причине он работает в локальной, то есть Visual Studio, но не в среде веб-сайта Azure.
Просто скопируйте Local = true в свойствах сборки (System.Web.Http.WebHost), а затем выполните повторное развертывание, оно должно работать нормально.
Ответ 7
Я использую vs2012, и я думаю, что обновление KB2781514 изменило некоторые настройки. Весь мой System.Web.Http в моем проекте MVC4 изменился на false, и я продолжаю получать это сообщение. Я изменил свойство All file in this project
в публикации, но не работал. Наконец, я должен поменять Copy Local = true
один за другим и решить эту проблему.
Ответ 8
У меня была такая же проблема в моем приложении.
System.web.http.webhost not found.
Вам просто нужно скопировать файл system.web.http.webhost
из основного проекта, который вы запускаете в Visual Studio, и вставить его в опубликованный проект bin
.
После этого может отображаться та же ошибка, но имя каталога изменилось, оно может быть system.web.http
. Следуйте той же процедуре, что и выше. Он будет работать после загрузки всех файлов. Это связано с пакетом nuget в Visual Studio, который они загружают из Интернета, но на сервере он не может его загрузить.
Этот файл можно найти в каталоге проекта bin
.
Ответ 9
У меня такая же ошибка, и я изменил свою версию с 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>
Ответ 10
Это случилось со мной на VS2013 (обновление 5)/ASP.NET 4.5 под типом проекта "Веб-приложение", которое включает MVC и Web API 2. Ошибка произошла сразу после создания проекта и перед добавлением какого-либо кода. Добавив следующую конфигурацию, исправьте это для меня. После разрешения "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>
Ответ 11
Мне не хватало нескольких DLL. Даже если я вручную скопировал их в каталог, в следующий раз, когда я их опубликую, они исчезнут. Каждый из них уже был настроен на Копирование локально в VS.
Исправление для меня состояло в том, чтобы установить каждую из них на Копировать Локально false, сохранить, построить, а затем установить для каждого, чтобы скопировать локально true. На этот раз, когда я опубликовал все библиотеки DLL, опубликованные правильно. Странно
Ответ 12
Если у вас есть несколько проектов в вашем решении, и один из ваших проектов не удается построить из-за этой ошибки, убедитесь, что в этом проекте установлен пакет обновления для WebApi Core nuget. Просто добавление ссылки на System.Web.Http не помогает, вам нужно установить правильный пакет nuget в этот проект.
В моем решении было несколько проектов, и WebApi Core уже был установлен в другом проекте. Я ссылался на сборку System.Web.Http, щелкнув правой кнопкой мыши и отметив сборку из списка, и она не работала на Azure, хотя локально она будет хорошо работать. Мне пришлось удалить справочную информацию вручную и добавить пакет нужного пакета WebApi Core для каждого проекта, для которого нужна ссылка на сборку.
Ответ 13
В случае, если "Копировать локальную" уже "Истина", я иногда нахожу ее работать, если вы удаляете файлы, в которых она была опубликована, и публикуйте ее снова.
Например, если вы используете IIS, удалите веб-сайты и содержимое каталога, в который они были опубликованы, и опубликуйте снова.
В месте назначения могут быть более старые версии файлов, поэтому, чтобы убедиться, что вы не используете старые версии, удалите все, прежде чем публиковать их снова.
Ответ 14
Я удалил следующую запись из web.config, и она сработала для меня.
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
</dependentAssembly>
Ответ 15
Убедитесь, что версия пакета одинакова для всего решения. Я просто понизил и обновил пакет Microsoft.AspNet.Mvc
во всем решении, и проблема решена.