Не удалось загрузить файл или сборку System.Net.Http, Version = 4.0.0.0 с предварительным выпуском OData веб-API ASP.NET (MVC 4)

Проблема

После установки предварительной версии Microsoft ASP.NET Web API OData package 5.0.0-rc1 я получил следующее исключение:

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

Мой проект MVC 4 совершенно новый и очень маленький, ничего особенного в нем нет. Я нацелен на .NET framework 4.5

Мне нужен этот пакет nuget, чтобы реализовать PATCH с помощью Delta class (когда я использую версию 4.0.0.0 пакета, класс Delta не работает).

Как я могу это исправить?

Мои версии System.Web.Http

В GAC у меня есть версия 5.0.0.0 System.Web.Http

gacutil -l System.Web.Http Глобальный кэш сборок содержит следующие сборки: System.Web.Http, Version = 5.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL

В Visual Studio, когда я просматриваю сборки, заданная версия System.Web.Http - 4.0.0.0 (почему?)

В моем проекте ссылка на System.Web.Http

  • Имеет версию 5.0.0.0
  • Указывает на папку \ lib \ net45 \ пакета
  • Имеет CopyLocal = true

Вещи, которые я пробовал

Я пытался привязать redirect v 4.0.0.0 к 5.0.0.0 в Web.config

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

Но это дает мне другое исключение:

Попытка методом System.Web.Http.GlobalConfiguration..cctor () получить доступ к полю System.Web.Http.GlobalConfiguration.CS $ ‹> 9__CachedAnonymousMethodDelegate2 не удалась.

Я предполагаю, что версия 4.0.0.0 действительно должна использоваться ядром Web Api.

Связанные вопросы

Ошибка анализа кода Возможна не загружать файл или сборку 'System.Net.Http, Version = 2.0.0.0 в веб-API MVC4 Не удалось загрузить файл или сборку 'System.Net.Http, Version = 2.0.0.0 в MVC4 Web API


person Yves M.    schedule 24.09.2013    source источник
comment
Возможно, этот ответ может вам помочь: stackoverflow.com/a/18700279/795876   -  person fsenart    schedule 24.09.2013


Ответы (13)


В Visual Studio 2013 появилась новая функция, позволяющая решить эту проблему. При сборке приложения вы должны увидеть предупреждения о разных версиях сборки, на которую ссылаются. Дважды щелкните предупреждение, чтобы добавить перенаправления привязки сборки в файл web.config.

См. http://msdn.microsoft.com/en-us/library/2fc472t2.aspx для получения дополнительных сведений.

jeff.eynon отмечает ниже, что вам необходимо проверить web.config (при использовании системы управления версиями TFS), чтобы VS автоматически редактировал файл. Спасибо за совет!

person Jay Douglass    schedule 31.10.2013
comment
Хотел бы я проголосовать за это 10 раз. Было приятно, что VS делает это автоматически. Спасибо за совет! - person Bob Horn; 04.04.2014
comment
К сожалению, это не всегда работает. На самом деле я бы сказал, что чаще всего двойной щелчок по этому предупреждению ничего не дает. - person Trevor de Koekkoek; 26.05.2014
comment
Вы должны проверить конфигурацию изменяемого веб-приложения / приложения. По какой-то причине VS, похоже, не хочет проверять файл для вас в этом случае. - person jeff.eynon; 03.09.2014

Я заставил это работать, обновив пакет WebApi до предварительной версии с помощью nuget:

PM> Microsoft.AspNet.WebApi -Pre

Чтобы заставить проект использовать последнюю версию WebApi, потребовались некоторые изменения в корневом файле Web.config:

1) Веб-страницы версии от 2.0.0.0 до 3.0.0.0

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

2) Перенаправление привязки к 5.0.0.0 для System.Web.Http и System.Net.Http.Formatting

<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>

Я думаю это все

PS: Решение, очень вдохновленное WebAPI OData 5.0 Beta - доступ к GlobalConfiguration вызывает ошибку безопасности

person Yves M.    schedule 24.09.2013
comment
это сработало для меня - я столкнулся с этой же проблемой при установке последнего пакета веб-API CORS из-за обновленной зависимости system.net.http. - person sandeep talabathula; 27.02.2014
comment
ты рок человек, спасибо тебе большое. В моем случае веб-конфигурация не обновлялась восстановлением nuget, я делал это вручную после развертывания. - person Leandro Bardelli; 16.09.2015
comment
Точно так же он получает +1, потому что, когда VS не делает этого за вас, вам нужен этот ответ, чтобы иметь возможность самостоятельно выполнить привязку. - person Michael Blackburn; 25.07.2016

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

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

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

person Bronek    schedule 17.12.2014
comment
это решило это и для меня - однако я действительно хотел бы знать, что это на самом деле означает? - person serup; 10.03.2016

У меня возникла эта проблема, когда я пытался обновить проект Hot Towel из шаблона проекта и когда я создал пустой проект и установил HotTowel через nuget в VS 2012 по состоянию на 23.10.2013.

Чтобы исправить это, я обновил через Nuget пакеты Web Api Web Host и Web API до 5.0, текущей версии в NuGet на данный момент (23.10.2013).

Затем я добавил директивы привязки:

<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>
person Kevin LaBranche    schedule 23.10.2013

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

person Sameer Alibhai    schedule 17.12.2013

Удалите System.Web.Http и System.Net.Http.Formatting из ваших ссылок и добавьте ссылки обратно, перейдя в папку bin (куда они были скопированы с помощью nuget). Теперь в версии файла указано 5.0.0.0

person JJ_Coder4Hire    schedule 18.10.2013

Эта ошибка появлялась несколько раз в нескольких разных проектах.

В конце концов я понял, что при сборке в моей папке bin уже была копия двоичной сборки system.web.mvc.

Чтобы исправить это, щелкните правой кнопкой мыши сборку в списке ссылок и выберите «Свойства». Убедитесь, что это последняя версия, просмотрев свойство «Версия». Если это так, установите для параметра «Копировать локальное» значение «истина».

Это гарантирует, что версия, на которую ссылается ваш проект, будет той версией, которая попадет в вашу папку двоичных файлов.

Если ошибка по-прежнему возникает, попробуйте запустить nuGet, чтобы получить последнюю версию, а затем повторите попытку выше.

Удачи - это досадная ошибка!

person user1628627    schedule 21.10.2014

Я столкнулся с той же ошибкой. Когда я установил Unity Framework для внедрения зависимостей, в мою конфигурацию были добавлены новые ссылки на Http и HttpFormatter. Итак, вот шаги, которым я следовал.

Я выполнил следующую команду в консоли диспетчера пакетов nuGet: PM> Install-Package Microsoft.ASPNet.WebAPI -pre

И добавил физическую ссылку на dll с версией 5.0

person Chandra Prakash Soni    schedule 30.09.2015

Я столкнулся с проблемой того же типа и выполнил следующие шаги, чтобы решить проблему.

Перейдите в Инструменты -> Диспетчер пакетов библиотеки -> Консоль диспетчера пакетов и выполните следующую команду.

Установочный пакет Microsoft.ASPNet.WebAPI -pre

person Santu Ghosh    schedule 02.03.2016

Решаю способом nuget. при первой установке nuget. второй, который вы используете.
следующая иллюстрация:

третье: проверьте, последняя ли это версия, просмотрев свойство «Версия».

Напоследок: вы снова проверяете, есть ли у проекта последняя версия.

person Nguyễn Thị Nữ    schedule 29.09.2016

После изменения ссылок в файле Web.config, как указано выше, мы разрешили ссылки.

Я столкнулся с аналогичной проблемой.

Для нас у нас есть ссылки Microsoft.Data.Edm.dll и OData.dll и другие сборки из Program Files:

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                          \bin\.NETFramework\Microsoft.Data.Edm.dll

а также

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                        \bin\.NETFramework\Microsoft.Data.OData.dll

и версия была 5.6.4.

Как только я изменил ссылку на обе сборки на C:\....Project\packages\Microsoft.Data.Edm.5.6.0, проблема была решена.

person Gaurav Gupta    schedule 21.01.2017

Зашел в диспетчер пакетов nuget и обновил свои пакеты. Теперь это работает. Основным обновленным мной был Microsoft.AspNet.WebApi.Core. Возможно, потребуется сделать это с обоими проектами, чтобы синхронизировать нужные ссылки.

person Exzile    schedule 11.04.2017

Если возникает эта проблема, проверьте файл web.config в разделе ниже.

В разделе ниже указана версия конкретной используемой DLL

проверив этот раздел в web.config, откройте обозреватель решений и выберите ссылку в дереве проекта, как показано. Обозреватель решений-> Справочник

Раскрыв ссылку, найдите dll, которая вызвала ошибку. Щелкните правой кнопкой мыши ссылку на dll и проверьте версию, как показано на изображении выше.

Если и версия config dll, и ссылочная dll отличаются, вы получите это исключение. Убедитесь, что оба имеют одну и ту же версию, что может помочь.

person user3235808    schedule 22.05.2017