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


81

Проблема

После установки пререлиза Microsoft ASP.NET Web API OData 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 (когда я использую версию 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 в веб-API MVC4.


1
Может быть, этот ответ может вам помочь: stackoverflow.com/a/18700279/795876
fsenart

Ответы:


164

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

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

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


7
Хотел бы я проголосовать за это 10 раз. Было приятно, что VS делает это автоматически. Спасибо за совет!
Боб Хорн,

4
К сожалению, это не всегда работает. На самом деле я бы сказал, что чаще всего двойной щелчок по этому предупреждению ничего не дает.
Trevor de Koekkoek

3
Вы должны проверить изменяемую конфигурацию веб-приложения / веб-сайта. По какой-то причине VS, похоже, не хочет проверять файл для вас в этом случае.
jeff.eynon

39

Я заставил это работать, обновив пакет 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 - доступ к GlobalConfiguration вызывает ошибку безопасности


3
это сработало для меня - я столкнулся с этой же проблемой при установке последнего пакета веб-api CORS из-за обновленной зависимости system.net.http.
sandeep talabathula

1
ты рок человек, спасибо большое. В моем случае веб-конфигурация не обновлялась восстановлением nuget, я делаю это вручную после развертывания.
Леандро

Точно так же он получает +1, потому что, когда VS не делает этого за вас, вам нужен этот ответ, чтобы иметь возможность самостоятельно выполнить привязку.
Майкл Блэкберн

11

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

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

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


1
это решило это и для меня - однако я действительно хотел бы знать, что это на самом деле означает?
serup

11

У меня возникла эта проблема, когда я пытался обновить проект 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>

8

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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


4

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


1

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

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

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

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

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

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


1

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

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

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


1

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

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

Напоследок: вы снова проверяете наличие последней версии проекта.


0

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

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

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


0

После изменения ссылок в 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, проблема была решена.


0

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


0

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.