Не удалось загрузить файл или сборку 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 во всем решении, и проблема решена.