Проблема
После установки пререлиза 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.
Ответы:
В Visual Studio 2013 появилась новая функция, позволяющая решить эту проблему. При сборке приложения вы должны увидеть предупреждения о разных версиях сборки, на которую ссылаются. Дважды щелкните предупреждение, чтобы добавить перенаправления привязки сборки в файл web.config.
См. Http://msdn.microsoft.com/en-us/library/2fc472t2.aspx для получения дополнительных сведений.
jeff.eynon отмечает ниже, что вам необходимо проверить web.config (при использовании системы управления версиями TFS), чтобы VS автоматически редактировал файл. Спасибо за совет!
источник
Я заставил это работать, обновив пакет WebApi до предварительной версии с помощью nuget:
Чтобы заставить проект использовать последнюю версию 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 вызывает ошибку безопасности
источник
Я столкнулся с той же проблемой и решил ее, установив для CopyLocal значение true для следующих библиотек:
System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll
Я должен добавить, что использую MVC4 и NET 4
источник
У меня возникла эта проблема, когда я пытался обновить проект 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>
источник
Или вы можете сделать это из консоли диспетчера пакетов NuGet
Install-Package Microsoft.AspNet.WebApi -Version 5.0.0
И тогда вы сможете добавить ссылку на System.Web.Http.WebHost 5.0
источник
Удалите System.Web.Http и System.Net.Http.Formatting из ваших ссылок и добавьте ссылки обратно, перейдя в папку bin (куда они были скопированы с помощью nuget). Теперь в версии файла указано 5.0.0.0
источник
Эта ошибка появлялась несколько раз в нескольких разных проектах.
В конце концов я понял, что при сборке в моей папке bin уже была копия двоичной сборки system.web.mvc.
Чтобы исправить это, щелкните правой кнопкой мыши сборку в списке ссылок и выберите «Свойства». Проверьте, является ли это последней версией, просмотрев свойство «Версия». Если это так, установите для параметра «Копировать локально» значение true.
Это гарантирует, что версия, на которую ссылается ваш проект, будет той версией, которая попадет в вашу папку двоичных файлов.
Если ошибка по-прежнему возникает, попробуйте запустить nuGet, чтобы получить последнюю версию, а затем повторите попытку выше.
Удачи - это досадная ошибка!
источник
Я столкнулся с той же ошибкой. Когда я установил Unity Framework для внедрения зависимостей, в мою конфигурацию были добавлены новые ссылки на Http и HttpFormatter. Итак, вот шаги, которым я следовал.
Я выполнил следующую команду в консоли диспетчера пакетов nuGet: PM> Install-Package Microsoft.ASPNet.WebAPI -pre
И добавил физическую ссылку на dll с версией 5.0
источник
Решаю способом nuget. при первой установке nuget. второй вы используете.
иллюстрации следуют:
В-третьих: проверьте, является ли это последней версией, просмотрев свойство «Версия».
Напоследок: вы снова проверяете наличие последней версии проекта.
источник
Я столкнулся с проблемой такого же типа и выполнил следующие шаги, чтобы решить проблему
Перейдите в Инструменты -> Диспетчер пакетов библиотеки -> Консоль диспетчера пакетов и выполните следующую команду.
Установочный пакет Microsoft.ASPNet.WebAPI -pre
источник
После изменения ссылок в
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
, проблема была решена.источник
Зашел в диспетчер пакетов nuget и обновил свои пакеты. Теперь это работает. Основным, что я обновил, был Microsoft.AspNet.WebApi.Core. Возможно, потребуется сделать это с обоими проектами, чтобы синхронизировать нужные ссылки.
источник
Если возникает эта проблема, проверьте файл web.config в разделе ниже.
В разделе ниже указана версия конкретной используемой DLL.
после проверки этого раздела в web.config откройте обозреватель решений и выберите ссылку в дереве проекта, как показано. Обозреватель решений-> Справочник
Раскрыв ссылку, найдите dll, которая вызвала ошибку. Щелкните правой кнопкой мыши ссылку на dll и проверьте версию, как показано на изображении выше.
Если и версия config dll, и ссылочная dll отличаются, вы получите это исключение. Убедитесь, что оба имеют одну и ту же версию, что может помочь.
источник