Не удалось загрузить файл или сборку 'System.Web.Http 4.0.0 после обновления с 2012 по 2013 гг.

183

Я сделал обновление в соответствии с. http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and- веб-апи-2

Я получаю ошибку. Кто-нибудь еще получил эту ошибку?

Ошибка сервера в приложении '/'

Не удалось загрузить файл или сборку 'System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.IO.FileLoadException: не удалось загрузить файл или сборку 'System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Ошибка источника:

Строка 48: Строка 49: Строка 50:} Строка 51: Строка 52: защищенная пустота Application_BeginRequest (отправитель объекта, EventArgs e)

Исходный файл: d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs Строка: 50

Отслеживание загрузки сборки: следующая информация может быть полезна для определения, почему не удалось загрузить сборку «System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35».

=== Информация о состоянии предварительной привязки === LOG: DisplayName = System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 (указана полностью) LOG: Appbase = file: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: Initial PrivatePath = D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ bin Вызов сборки: ThirdPartyWebAPI, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null. === LOG: эта привязка начинается в контексте загрузки по умолчанию. LOG: использование файла конфигурации приложения: D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ web.config LOG: использование файла конфигурации хоста: C: \ Users \ michalc \ Documents \ IISExpress \ config \ aspnet.config LOG: использование конфигурации компьютера файл из C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. LOG: ссылка после политики: System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 LOG: Попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Teorary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http.DLL. LOG: Попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Tevive Files ASP.NET / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http .DLL. LOG: Попытка загрузки нового файла URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: сравнение имени сборки привело к несоответствию: Major Version ERR: Не удалось завершить настройку сборки (hr = 0x80131040). Зондирование прекращено. Попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Tevive ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL , LOG: Попытка загрузки нового файла URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: сравнение имени сборки привело к несоответствию: Major Version ERR: Не удалось завершить настройку сборки (hr = 0x80131040). Зондирование прекращено. Попытка загрузки нового файла URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Tevive ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL , LOG: Попытка загрузки нового файла URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: сравнение имени сборки привело к несоответствию: Major Version ERR: Не удалось завершить настройку сборки (hr = 0x80131040). Зондирование прекращено. Не удалось завершить настройку сборки (hr = 0x80131040). Зондирование прекращено. Не удалось завершить настройку сборки (hr = 0x80131040). Зондирование прекращено.

Трассировки стека:

[FileLoadException: не удалось загрузить файл или сборку 'System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)] ThirdPartyWebAPI.WebApiApplication.Application_Start () в d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs: 50

[HttpException (0x80004005): не удалось загрузить файл или сборку 'System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (контекст HttpContext, приложение HttpApplication
) +9935033
System.Web.HttpApplication.RegisterEventSubshttp. .InitSpecial (состояние HttpApplicationState, обработчики MethodInfo [], IntPtr appContext, контекст HttpContext) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext context) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +296

[HttpException (0x80004005): не удалось загрузить файл или сборку 'System.Web.Http, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)]
System.Web.HttpRuntime.FirstRequestInit (контекст HttpContext) +9913572 System.Web.HttpRuntime.EnsureFirstRequestInit (контекст HttpContext) +101TestWestWebWebWiki


Информация о версии: Microsoft .NET Framework Версия: 4.0.30319; ASP.NET версия: 4.0.30319.18408

Михал Асаф Кармели
источник
Вы пытались повторно добавить ссылку на 'System.Web.Http'
Изикон
4
Пожалуйста, отметьте ответ как принятый.
Алиостад

Ответы:

288

Я исправил это, переустановив пакет NuGet , который исправляет нарушенные зависимости. В диспетчере пакетов запустите:

Update-Package Microsoft.AspNet.WebApi -reinstall
Pathoschild
источник
1
Локальный запуск веб-приложения был для меня нормальным (F5), но при развертывании на удаленном сервере (с WebDeploy) сборки не копировались на сервер. Я не был уверен, нужно ли скопировать сборки или нет. В любом случае, после выполнения этой команды все необходимые сборки были помечены как copy-local = true, и после развертывания приложение начало работать правильно
Гильермо Руффино,
3
Просто добавить более сбалансированную картину - это не решило проблему для меня.
Льюрей
2
Обязательно добавьте необходимое обновление для любых зависимых проектов, таких как тесты и т. Д.
DeeArgee
Я сделал это, и он сделал слишком много изменений, но я заметил, что он изменил перенаправления привязки в web.config, я отменил все другие изменения, которые он сделал, и это сработало для меня.
Myster
теперь я получаю новую ошибку: новая версия - версия = 5.2.3.0, и она ожидает версию = 4.0.0.0
Яр
84

Чтобы устранить ошибку «Не удалось загрузить файл или сборку System.Web.Http», используйте NuGet для установки Web API 2.1 WebHost.

В обозревателе решений в ссылках щелкните правой кнопкой мыши и выберите Управление пакетами Nuget. (если нет, установите Nuget)

введите описание изображения здесь

В окне «Управление пакетами NuGet» с левой стороны щелкните онлайн, затем в правом верхнем углу найдите веб-хост и установите веб-хост Microsoft ASP.NET Web API 2.1. (После установки кнопка установки изменится на зеленую галочку)

После этого проект перезагрузится, и при повторной сборке ошибка будет устранена, и проект будет отлажен и запущен. Ошибка исчезнет, ​​и вы можете быть «Ресурс не найден. Просто добавьте URL (например, с localhost: 52088 / на localhost: 52088api / products)

Ваш вопрос был хорош и помог мне.

Надеюсь, этот ответ поможет!

Катто
источник
Спасибо, Катто. Это меня очень помогло.
Саураб Сони
61

Вам необходимо добавить перенаправления сборки:

<configuration>

   ....

   <runtime>
      <assemblyBinding>
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      </assemblyBinding>
   </runtime>

   ...

</configuration>

Скорее всего, вам придется сделать это еще для нескольких сборок, таких как веб-хостинг и т. Д.

Aliostad
источник
Я отредактировал ответ. По какой-то причине имя DLL было изменено на Виндзорский замок System.Web.Http.
Алиостад
7
Никогда не следует добавлять двоичные перенаправления, не убедившись, что новая сборка двоично совместима с предыдущей.
GETah
18

Или вы можете сделать это из консоли диспетчера пакетов NuGet

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

И тогда вы сможете добавить ссылку на System.Web.Http.WebHost 5.0

Самир Алибхай
источник
работать для меня, просто установите Install-Package Microsoft.AspNet.WebApi
Джама
17

Когда я установил Web Api 2.2 help, эта ошибка началась. Я добавил это в web.config, и это решило мою проблему.

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>
jhilden
источник
1
То же самое можно сказать о проекте, который изначально был Web Api 2.2 при публикации в Azure. Локально проект работал нормально, но в Azure я получил ошибку от OP. Добавление этих строк в web.config и повторная публикация в Azure исправили это.
AronVanAmmers
4

Я просто установил Copy Local = trueнедостающую сборку, и это сработало. Это, конечно, происходит, если щелкнуть правой кнопкой мыши отсутствующую ссылку (которая указана в сообщении об ошибке) и выбрать свойства; как показано ниже:

введите описание изображения здесь

Это должно решить одну проблему, так как может быть несколько сборок, вызывающих проблему - я выбрал все сборки и щелкнул по ним правой кнопкой мыши; выбранные свойства; и установите для них всех значение Copy Local = true; и затем переиздать.

t_plusplus
источник
1
Работал отлично. Мне нужно было только сделать «Копировать локальный = true» на System.Web.Http и System.Net.Http.Formatting
Sandip Subedi
4

Правильное решение для решения этой проблемы, следуя шагам

, Обновите Visual studio, если у вас более старая версия до 15.5.4 (необязательно)

  1. Удалить все перенаправления привязки из web.config

  2. Добавьте это в файл csproj:

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
  1. Сложение.

  2. В папке bin должен быть (WebAppName).dll.configфайл.

  3. В нем должны быть перенаправления. Скопируйте их в web.config

  4. Удалите приведенный выше фрагмент из файла csproj снова

  5. Он должен работать

Detailed Blog

Sajeetharan
источник
это не создает все привязки
batmaci
3

Для меня это было только с этой ошибкой в ​​производственной среде, а не на локальной машине; Решено было удалить содержимое папки / bin, а затем восстановить его снова.

Oana
источник
Это то, что люди должны проверить. У меня была такая же проблема. Оказалось, что во внешнем интерфейсе моего приложения была ненужная dll для Microsoft.AspNet.Cors. У меня была удалена папка bin в системах prod, переиздан сайт и магия.
Рон
2

Просто очевидный, но полезный совет ... не забудьте проверить, что новая версия, указанная в привязке сборки webconfig, - это та же версия, на которую вы ссылаетесь в ссылках на ваш проект. (т.е. когда я пишу это ... это будет 5.1.0.0, если вы недавно сделали NUGet на System.Web.Http

Джим Талиадорос
источник
2
 Installing NuGet package ASP.NET.MVC solved the issue for me. 
 To install package.
 - Right click on project 
 - Select "Manage NuGet Packages"
 - Select Online->Nuget.org from left menu
 - select "Microsoft ASP.NET MVC"
 - Click Install

 If you have already installed package earlier, please update the package by selecting Updates from left menu and then selecting "Microsoft ASP.NET" and click Update.

введите описание изображения здесь

введите описание изображения здесь

Арвинд Крмар
источник
2

Это может кому-то помочь.

Я решил пойти с приложением MVC4.

запустить проект, работал

Затем установил несколько пакетов, таких как
Microsoft ASP.NET WEB API 2.2 (4 пакета)
Microsoft ASP.NET WEB API 2.2 Страница справки
Microsoft ASP.NET WEB API 2.2 OWIN

запустить проект, та же ошибка, что и в вопросе

Решение:

В web.config

 <dependentAssembly>
      <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
 </dependentAssembly>


Задача решена


но затем обнаружена ошибка исправления. Чтобы устранить ее, перейдите в папку VIEW вашего проекта MVC4, найдите файл second web.config и измените версию с 2.0.0.0 на 3.0.0.0, как показано ниже.


<configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

micronyks
источник
2

В моем случае я фактически пропустил мой web.config, который имел соответствующие перенаправления привязки. Восстановление web.configисправило ошибку.

Брэндон Хоукейкер
источник
2

Я мог бы решить аналогичную проблему с System.Net.HTTP, добавив ссылку на сборку в app.config основного приложения.

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.0.0.0" />
      </dependentAssembly></runtime>
Параг Бангад
источник
1

Я нашел решение! Удалите папку с именем package в каталоге проекта, а затем пересоберите ее для запуска.

Ашитош бираждар
источник
1
<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
Равула Сандип
источник
1

ДА!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

В моем случае работает нормально .... thnkz

X-Coder
источник
2
Это просто копия существующего ответа . Поскольку вам больше нечего добавить, рассмотрите возможность удаления этого.
zzzzBov
1

Я ничего не сделал, просто скопировал DLL-файлы папки Bin для разработки в онлайн- папку Bin, и у меня все заработало.

Анжан Кант
источник
0

Как уже говорили другие, просто переустановите пакет MVC в свой веб-проект с помощью nuget, но обязательно добавьте пакет MVC в любые проекты в зависимости от веб-проекта, например, модульные тесты. Если вы создадите каждый включенный проект по отдельности, вы увидите, что те требуют обновления.

DeeArgee
источник
0

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

Мое приложение работает в LocalIIS (не IIS EXPRESS). Я включаю сборку трассировки загрузки и выясняю, что она хочет загрузить System.Web.Http- загрузку из-под временной температуры. поэтому удалите все папки catch в нем.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Временные файлы ASP.NET [мое приложение]

Мохаммадреза
источник
0

Я решил эту проблему, отменив изменения, внесенные в nuget web.configпосле запуска nuget. Вернуть изменения в предыдущую рабочую версию.

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>
roo2
источник
0

Для меня эта проблема решилась переустановкой страницы справки Microsoft ASP.NET Web API 2.2 и пакетов Microsoft ASP.NET Web API 2.2 OWIN . Я переустанавливал оба одновременно, но я думаю, что это был первый, который решил проблему.

Я попробовал первые несколько решений, предлагаемых здесь, но это не помогло, затем я сравнил свои зависимости с теми, что были в проекте, который работал (из курса по Pluralsight), и две зависимости выше были более низкой версией (5.0.0). ) поэтому я обновил их до 5.2.3, и он начал работать.

lukegf
источник
0

У меня было это из службы WCF. Для меня (поскольку проблема отображалась в локальном dev), мне просто пришлось удалить содержимое папки bin под решением. Перестройка работает нормально еще раз.

DubMan
источник
0

Версия ASP.NET: 4.0.30319.18408 принадлежит .Net4.5, а версия System.Web.Http = 4.0.0.0 совместима с .NET4.0. Таким образом, версии, которые у вас есть, не совместимы. Вам следует обновить System.Web.Http до версии 5.0.0.0, которая совместима с .Net4.5

oscarMg
источник
0

У меня была похожая проблема. Все работало раньше. Первоначально он был создан с использованием веб-форм, а затем для некоторых вещей был добавлен веб-API.

  • Пробовал удалить, установить и переустановить пакет Microsoft.AspNet.WebApi.
  • Попытался удалить папку с пакетами из решения и позволить восстановить NuGet в VS.
  • Попытался удалить отдельные ссылки на сборки (в разделе Ссылки) и переустановить пакеты.
  • Попытка добавления перенаправления привязки к версии 5.2.3.0 в web.config упоминается в нескольких ответах. У меня ничего не получалось.

В Visual Studio сработало изменение настроек профиля публикации с Release на Debug. Странно, но вот что сработало. Так что делимся здесь.

joym8
источник
0

Эта проблема возникла при развертывании в Azure с помощью функции публикации. Не забудьте очистить файлы в месте назначения.

Publish Settings -> File Publish Options drop down -> Check Remove additional files at destination

Это решило мою проблему, на случай, если люди будут охотиться за этим, как я. В моем проекте / решении все было одинаковой версией, но не в том месте, куда я развертывал.

Shelby115
источник
0

Если вы используете несколько проектов для решения и вызываете метод в одном проекте для другого проекта, убедитесь, что все проекты (называемые проектом и проектом вызывающей стороны) используют уникальную 'System.Net.Http'версию .

MohammadSoori
источник
0

Измените флаг версии Specfic с true на false для dll в ссылке

user2992715
источник
0

У меня была та же проблема с System.Web.Http.WebHost, версия = 5.2.6.0, на которую ссылались, но последний пакет NuGet был 5.2.7.0. Я отредактировал файлы web.config, переустановил пакет NuGet, затем отредактировал файлы проектов visual studio для всех моих проектов, чтобы убедиться, что ссылки на 5.2.6.0 не сохранились. Даже после всего этого проблема сохранялась.

Затем я посмотрел в папке bin для проекта, который выдавал исключение, где я нашел DLL для одного из моих других проектов, который не является зависимостью и никогда не должен был быть там. Я удалил поврежденную DLL (которая была скомпилирована с использованием версии 5.2.6.0 System.Web.Http.WebHost), перестроил проблемный проект, и теперь он работает.

cghore
источник