Не вдалося завантажити файл або збірку System.Web.Http.WebHost після публікації на веб-сайті Azure


141

Я створив веб-проект, і він працює добре в студії Visual. Однак я отримав таку помилку після опублікування її на сайтах azurewe. Що може спричинити проблему?

Не вдалося завантажити файл чи збірку "System.Web.Http.WebHost, Версія = 5.0.0.0, Культура = нейтральна, PublicKeyToken = 31bf3856ad364e35" або одна з її залежностей. Маніфестне визначення розташованої збірки не відповідає посиланням на збірку. (Виняток з HRESULT: 0x80131040)

Опис: Неопрацьований виняток стався під час виконання поточного веб-запиту. Перегляньте слід стека, щоб отримати докладнішу інформацію про помилку та місце її виникнення в коді.

Деталі винятку: System.IO.FileLoadException: Не вдалося завантажити файл або збірку 'System.Web.Http.WebHost, версія = 5.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35' або одна з її залежностей. Маніфестне визначення розташованої збірки не відповідає посиланням на збірку. (Виняток з HRESULT: 0x80131040)

Помилка джерела:

Неопрацьоване виняток було створено під час виконання поточного веб-запиту. Інформацію щодо походження та місцезнаходження винятку можна ідентифікувати за допомогою сліду стека винятку нижче.

Слідування завантаження слідів: Наступна інформація може бути корисною для визначення того, чому збірку "System.Web.Http.WebHost, Версія = 5.0.0.0, Культура = нейтральна, 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>

Відповіді:


129

The dllВідсутня в опублікованій (розгорнутої середовищі). Саме тому він працює в локальній, тобто Visual Studio, але не в середовищі веб-сайтів Azure.

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

Якщо у вас з’являється аналогічна помилка, тобто якась інша збірка відсутня, тоді зробіть цю збірку copylocal = true і переукладіть, повторіть це повторно - якщо ви не впевнені в її залежностях.


2
Це Copy Localвже правда. Як не дивно це показує, що Runtime Versionце v4.0.30319 замість v5?
ca9163d9

4
Чи знаєте ви, що тут сталося? Я добре бігав 18 місяців, коли це підскочило і вкусило мене.
Глен Гордон

2
Це вирішило проблему для мене Спасибі! Але мені здається дивним, що ми маємо включати рамкові бібліотеки в наші проекти (у моєму випадку не Azure, а сервер IIS). Хтось знає, чи є у випадку запуску деяких оновлень, тому нам більше не потрібно їх включати?
edgarpetrauskas

1
Міні-доповнення, оскільки мені знадобилося назавжди знайти локальну копію: У VS2013 ви відкриєте вузол "посилання" у проекті та клацніть правою кнопкою миші-> властивості бібліотеки, на яку потрібно встановити "копіювати локальну".
ArtHare

6
Якщо для локального копіювання вже встановлено значення true і ви не можете оновити WebApi через залежності, існує такий фокус, щоб встановити Copy Local на значення false, побудувати, а потім встановити Copy Local назад на true і скласти. Я не знаю, чому це працює.
DeeArgee

90

Якщо ви все ще шукаєте відповідь, спробуйте перевірити цю тему . Це допомогло мені вирішити подібну проблему.

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


Будь ласка, уникайте лише відповідей на посилання .. швидше, будь ласка, опублікуйте відповідну інформацію з вище посилання тут ..
Anvesh Yalamarthy

3
Запуск команди Update-Package вирішив проблему, тоді як жодна з інших пропозицій не працювала. Дякую за відповідь!
DigiOz Multimedia

Найкраще рішення проблеми.
Фестим Кахані

Ідеальна відповідь, спасибі!
Аполо

3
Це рішення спрацювало і для мене. Я досить впевнений, що це було викликано функцією "Видалити невикористані збори" ReSharper. Видаліть невикористані збори, іноді сліпо видаляє збірки без перевірки вмісту пакета NuGet.
Джо Кінг

54

Я зіткнувся з тією ж проблемою, і я вирішив її, встановивши CopyLocalзначення true для наступних libs:

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

Треба додати, що я використовую MVC4 та NET 4


дякую, це було корисно. Чи знаєте ви, чому ці файли не були б просто в GAC? Це тому, що різні сайти можуть використовувати різні dotnet-фрейми тощо?
деллейм

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

Це вирішило проблему на моєму VPS (це не лише проблема блакитності)
Evilripper

Це працювало для мене (хоча я не використовую Azure). Я переміщував проект із середовища .net 4.5 вниз до рівня 4.0 і отримав цю проблему наприкінці всього.
TheQ

1
За пропозицією DeeArgee вище, я вже мав LOCAL COPY = вірно для всіх 3 цих dll. Але ця пропозиція остаточно вирішила проблему: "Якщо для Copy Local вже встановлено значення true, існує хитрість встановити Copy Local на false, build, потім встановити Copy Local назад на true та build. Я не знаю, чому це працює. - DeeArgee 19 листопада '15 о 17:16
Debbie A

34

Для мене працював, додаючи у 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, людина, яка задала це питання, повинна позначити це як відповідь!
Рей

Або просто додайте Microsoft.AspNet.WebApi.WebHostпакет через nuget.
Optimax

15

Для мене він почав працювати після вибору "Видалити додаткові файли за призначенням" у параметрі публікації файлів у налаштуваннях діалогового вікна публікації.


Працювали для мене! Хороший.
Доктор Шизо

Це єдине рішення, яке працювало на мене. Я здогадуюсь, там була якась інша стара версія DLL, яка спрацьовувала речі. Дякую!
Охад Шнайдер

10

DLL відсутня у опублікованому (розгорнутому середовищі). Саме тому він працює в локальній, тобто Visual Studio, але не в середовищі веб-сайтів Azure.

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


тут же, саме це було потрібно.
pabloelustondo

1
Можливо, тому, що його те саме рішення було описано в кількох інших відповідях роком раніше.
Чад

6

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


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>

2

У мене була така ж проблема в моїй заявці.

System.web.http.webhost not found.

Вам просто потрібно скопіювати system.web.http.webhostфайл з вашого основного проекту, який ви запускаєте у Visual Studio, і вставити його у свій опублікований binкаталог проектів .

Після цього він може відображати ту саму помилку, але ім'я каталогу буде змінено system.web.http. Дотримуйтесь тієї ж процедури, що і вище. Він буде працювати після завантаження всіх файлів. Це пов'язано з пакетом «nuget» у Visual Studio, який вони завантажують з Інтернету, але на сервері він не може його завантажити.

Ви можете знайти цей файл у своєму binкаталозі проектів .


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>

0

Мені бракувало декількох DLL-файлів. Навіть якщо я вручну скопіював їх у каталог, коли наступного разу я опублікував, вони зникнуть. Для кожного з них було вже встановлено Копіювати локально в VS. Виправленням для мене було встановлення кожного з них на "Копіювати локально неправдиво", зберігати, створювати, а потім встановлювати кожен для копіювання локально правдивої. Цього разу, коли я опублікував усі опубліковані DLL коректно. Дивно


0

Якщо у вас є декілька проектів у вашому рішенні, і один із ваших проектів не вдається створити через цю помилку, тоді переконайтесь, що ви встановили пакет нута WebApi Core у цьому проекті. Просто додавання посилання на System.Web.Http не допомагає, вам потрібно встановити правильний пакет нута в цей проект.

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


0

У випадку, якщо "Копіювати локальний" вже є "Істинним", я вважаю, що іноді це працює, якщо ви видалите файли, в яких він був опублікований, і опублікуйте його знову.

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

Можливо, в стані призначення можуть бути старіші версії файлів, тому, щоб переконатися, що ви не використовуєте старіші версії, видаліть усе, перш ніж опублікувати їх знову.


0

Наступний запис я видалив із 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>

0

Переконайтесь, що версія пакета рівномірна. Я просто знизив і оновив Microsoft.AspNet.Mvcпакет через рішення та проблему вирішено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.