Не вдалося завантажити файл або збірку System.Net.Http, версія = 4.0.0.0 з ASP.NET (MVC 4) веб-API OData Prerelease


81

Проблема

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

Не вдалося завантажити файл або збірку 'System.Web.Http, Версія = 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, Версія = 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

Те, що я пробував

Я намагався прив'язати переспрямування 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' не вдалася.

Я думаю, що v 4.0.0.0 дійсно повинен бути використаний основним механізмом Web Api.

Пов’язані запитання

Помилка аналізу коду Не вдалося завантажити файл або збірку 'System.Net.Http, Версія = 2.0.0.0 в MVC4 Web API Не вдалося завантажити файл або збірку' System.Net.Http, Версія = 2.0.0.0 в MVC4 Web API


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
На жаль, це не завжди працює. Насправді я б сказав частіше, ніж подвійне клацання цього попередження нічого не робить.
Тревор де Куккук,

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 Beta - доступ до GlobalConfiguration видає помилку безпеки


3
це спрацювало для мене - я зіткнувся з цією ж проблемою, коли встановив найновіший веб-пакет CORS через оновлену залежність system.net.http.
піщана талабатула

1
ти рок-людина, велике спасибі. У моєму випадку веб-конфігурація не була оновлена ​​за допомогою відновлення nuget, я роблю це вручну після розгортання.
Леандро

Так само, це отримує +1, тому що коли VS не робить це за вас, вам потрібна ця відповідь, щоб змусити прив'язку працювати самостійно.
Michael Blackburn

11

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

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

Потрібно додати, що я використовую MVC4 та NET 4


1
це вирішило це і для мене - однак, я справді хотів би знати, що це насправді означає?
серуп

11

Я відчув цю проблему, коли спробував оновити проект Hot Towel з шаблону проекту та коли створив порожній проект та встановив HotTowel через nuget у VS 2012 станом на 23.10.2013.

Для виправлення я оновив через Nuget Web Api Web Host та веб-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 Package Manager

 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.

Щоб це виправити, клацніть правою кнопкою миші на збірці у списку посилань та виберіть «властивості». Перевірте, чи це остання версія, переглянувши властивість "Версія". Якщо це так, переключіть "Копіювати локально" на істинне.

Це дозволить переконатися, що версія, на яку посилається ваш проект, є тією версією, яка потрапить у вашу папку двійкових файлів.

Якщо помилка все одно з’являється, спробуйте запустити nuGet, щоб отримати останню версію, а потім спробуйте вищезгадану ще раз.

Удачі - ця помилка - це біль!


1

Я зіткнувся з тією ж помилкою. Коли я встановив Unity Framework for Dependency Injection, у мою конфігурацію було додано нові посилання на Http та HttpFormatter. Отже, ось кроки, якими я керувався.

На консолі nuGet Package Manager я запустив таку команду: PM> Install-Package Microsoft.ASPNet.WebAPI -pre

І додав фізичне посилання на dll з версією 5.0


1

Я стикався з проблемами такого ж типу і виконував наведені нижче дії, щоб вирішити проблему

Зайдіть в Інструменти -> Менеджер пакунків бібліотеки -> Консоль диспетчера пакетів і запустіть команду нижче

Встановити-пакет Microsoft.ASPNet.WebAPI -pre


1

я вирішую способом nuget. перший встановлення nuget. другий, який ви використовуєте.
Ілюстрація слідує:

третє: перевірте, чи це остання версія, переглянувши властивість "Версія".

Нарешті: ви знову перевіряєте, чи має проект останню версію.


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 і перевірте наявність версії, як показано на зображенні вище.

Якщо і версія dll конфігурації, і dll, на яку посилається, відрізняються, ви отримаєте цей виняток. Переконайтесь, що обидві вони мають однакову версію, що допомогло б.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.