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

Проблема

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

Не удалось загрузить файл или сборку "System.Web.Http, Version = 4.0.0.0, Культура = нейтральная, 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, Культура = нейтральная, 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()' to поле доступа 'System.Web.Http.GlobalConfiguration.CS $< > 9__CachedAnonymousMethodDelegate2' не удалось.

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

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

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

Ответ 1

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

Подробнее см. http://msdn.microsoft.com/en-us/library/2fc472t2.aspx.

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

Ответ 2

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

Ответ 3

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

Чтобы исправить, я обновил через Nuget Web Api Web Host и веб-API пакеты до 5.0, текущую версию в NuGet на данный момент (10/23/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>

Ответ 4

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

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

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

Ответ 5

Или вы можете сделать это из консоли NuGet Package Manager

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

Ответ 6

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

Ответ 7

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

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

Чтобы исправить это, щелкните правой кнопкой мыши на сборке в списке ссылок и выберите "свойства". Убедитесь, что это последняя версия, посмотрев свойство "Версия". Если это так, переключите "Скопировать местное" на "true".

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

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

Удачи - эта ошибка - боль!

Ответ 8

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

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

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

Ответ 9

Я решаю путем nuget. сначала вы устанавливаете nuget. второй, который вы используете.
Иллюстрация:

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

Финал: вы проверяете проект, имея последнюю версию.

Ответ 10

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

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ниже приведена версия конкретной библиотеки dll

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

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

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

Ответ 14

Это должно сработать, у меня была такая же проблема, и я сделал это, чтобы исправить это:

Решение

Я сделал снимок экрана с официального сайта MSDN, так как у меня не было времени написать правильный ответ.