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