2013-12-02 4 views
128

Я создал веб-проект и хорошо работает в Visual Studio. Тем не менее, я получил следующую ошибку после публикации ее в azurewebsites. Что может вызвать проблему?Не удалось загрузить файл или сборку System.Web.Http.WebHost после публикации на веб-сайте Azure

Could not load file or assembly 'System.Web.Http.WebHost, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.FileLoadException: Could not load file or assembly 'System.Web.Http.WebHost, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Assembly Load Trace: The following information can be helpful to determine why the assembly 'System.Web.Http.WebHost, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be loaded.

WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [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> 

ответ

123

dll отсутствует в опубликованной (развернутой среде). Именно по этой причине он работает в локальной, то есть Visual Studio, но не в среде веб-сайта Azure.

Просто сделайте Copy Local = true в свойствах для сборки (System.Web.Http.WebHost), а затем выполните перераспределение, оно должно работать нормально.

Если вы получили аналогичную ошибку, то есть какая-либо другая сборка отсутствует, сделайте эту сборку copylocal = true и повторно разверните, повторите ее итеративно - если вы не уверены в ее зависимостях.

+1

The 'Copy Local' уже True. Странно это показывает, что 'Runtime Version' v4.0.30319 вместо v5? – ca9163d9

+4

Знаете ли вы, что здесь произошло? Я отлично справлялся в течение 18 месяцев, когда это вскочил и укусил меня. –

+0

Я думаю, что недавнее обновление Windows кое-что изменило. По мне все работало много лет, прежде чем начинать давать ошибку сегодня. В любом случае настройка Copy Local на данный момент является хорошим решением. Ответ Эдель не помог мне. – Eliyahu

32

Для меня работал, добавив следующий раздел 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. Надеюсь, это поможет кому-то решить эту проблему.

+2

ты потрясающий. работал как шарм в mvc5. Спасибо –

+2

Спасибо, работал для меня тоже +1, человек, который задал этот вопрос, должен отметить это как ответ! –

6

Я использую vs2012, и я думаю, что обновление KB2781514 изменило некоторые настройки. Весь мой System.Web.Http в моем проекте MVC4 изменился на false, и я продолжаю получать это сообщение. Я изменил All file in this project в публикации, но не работает. Наконец, я должен поменять Copy Local = true и решить эту проблему.

9

В опубликованной (развернутой среде) отсутствует dll. Именно по этой причине он работает в локальной, то есть Visual Studio, но не в среде веб-сайта Azure.

Просто сделайте копию Local = true в свойствах сборки (System.Web.Http.WebHost), а затем выполните повторное развертывание, оно должно работать нормально.

+0

почему люди проголосовали? он решил мою проблему. –

+0

То же самое здесь, это именно то, что нужно. – pabloelustondo

+1

Возможно, потому, что его одно и то же решение было описано в нескольких других ответах годом ранее. – Chad

79

Если вы все еще ищете ответ, попробуйте проверить это question thread. Это помогло мне решить аналогичную проблему.

Редактировать: Решение, которое помогло мне, состояло в том, чтобы запустить Update-Package Microsoft.AspNet.WebApi -reinstall из диспетчера пакетов NugGet, как это было предложено Pathoschild. Мне тогда пришлось удалить мой файл .suo и перезапустить VS, как предложил Сергей Осыпчук в this thread.

+0

Пожалуйста, избегайте ссылок только на ответы .. скорее, пожалуйста, разместите соответствующую информацию из вышеуказанной ссылки здесь. –

+6

Это позор, я могу только ответить на этот ответ один раз. –

+4

Это должен быть принятый ответ. –

2

У меня была такая же проблема в моем приложении.

System.web.http.webhost not found. 

Вам просто нужно скопировать system.web.http.webhost файл из основного проекта, который вы запускаете в Visual Studio и вставить его в опубликованном каталоге проекта bin.

После этого он может показывать ту же ошибку, но имя каталога изменяется, это может быть system.web.http. Следуйте той же процедуре, что и выше. Он будет работать после загрузки всех файлов. Это связано с пакетом nuget в Visual Studio, который они загружают из Интернета, но на сервере он не может его загрузить.

Вы можете найти этот файл в своем проекте bin.

11

Для меня он начал работать после выбора «Удалить дополнительные файлы в пункте назначения» в параметрах публикации файла в настройках в диалоговом окне публикации.

+0

Работал для меня! Хороший. –

+0

Это единственное решение, которое сработало для меня. Я предполагаю, что там была другая старая версия DLL, которая сработала. Благодаря! –

+0

Очень приятно - это сработало для меня - спасибо :) – JuniorCoder

51

Я встретил ту же проблему, и я решил, установив CopyLocal истину для следующей LIBS:

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

Я должен добавить, что я использую MVC4 и NET 4

+0

спасибо, что это было полезно. Вы знаете, почему эти файлы будут не только в GAC? Это потому, что разные сайты могут использовать разные сетевые объекты dotnet и т. Д.? – dellyjm

+0

Как я помню, эта проблема произошла с тех пор, как Microsoft применила критические исправления в этой области (я думаю, в System.Web/ASP NET/MVC). Я предполагаю, что эти пространства имен не находятся в GAC (поэтому не в сборках собственных NET), а в отдельных путях Visual Studio или MVC. – Bronek

+0

Это разрешило проблему на моем VPS (это не только лазурная проблема) – Evilripper

0

я пропускал несколько библиотек DLL. Даже если я вручную скопировал их в каталог, в следующий раз, когда я их опубликую, они исчезнут. Каждый из них уже был настроен на Копирование локально в VS. Исправление для меня заключалось в том, чтобы каждый из них скопировать Локально false, сохранить, построить, а затем установить для каждого, чтобы скопировать локально true. На этот раз, когда я опубликовал все библиотеки DLL, опубликованные правильно. Strange

0

Если у вас есть несколько проектов в вашем решении, и один из ваших проектов не удается построить из-за этой ошибки, убедитесь, что в этом проекте установлен пакет обновления для WebApi Core nuget. Просто добавление ссылки на System.Web.Http не помогает, вам нужно установить правильный пакет nuget в этот проект.

У меня было несколько проектов в моем решении, и WebApi Core уже был установлен в другом проекте. Я ссылался на сборку System.Web.Http, щелкнув правой кнопкой мыши и отметив сборку из списка, и она не работала на Azure, хотя локально она будет хорошо работать. Мне пришлось удалить справочную информацию вручную и добавить пакет ядра NetApp для каждого проекта, требующего ссылки на сборку.

0

В случае, если «Копировать местное» уже имеет значение True, я иногда нахожу его работать, если вы удаляете файлы, в которых он был опубликован, и публикуйте его снова.

Например, если вы используете IIS, удалите веб-сайты и содержимое каталога, в который они были опубликованы, и опубликуйте снова.

В месте назначения могут быть более старые версии файлов, поэтому для обеспечения того, чтобы вы не использовали более старые версии, удалите все, прежде чем публиковать их снова.

1

Это произошло со мной на 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> 
2

Я получил ту же ошибку, и я изменил мою версию с 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> 
Смежные вопросы