GlobalConfiguration.Configure () не присутній після міграції Web API 2 та .NET 4.5.1


148

Нещодавно я почав дотримуватися цього посібника з міграції свого проекту на .NET 4.5.1 та Web Api 2.

Перше, що розробник MS Рік Андерсон просить вас зробити, це змінити:

WebApiConfig.Register(GlobalConfiguration.Configuration);

до

GlobalConfiguration.Configure(WebApiConfig.Register);

у файлі global.asax. Але це дає мені помилку, коли я намагаюся створити:

Помилка 1 "System.Web.Http.GlobalConfiguration" не містить визначення для "Налаштувати"

Зараз мій проект знаходиться на MVC 5 та Web Api 2 та .NET 4.5.1, але я думаю, що System.Web.Http все ще вважає, що це версія .NEt 4.0.

Як я можу вирішити це?

Дякую.

Редагувати:

Ось мої збірки:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <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>
  <!--
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly> -->
</assemblyBinding>

Все, що було прокоментовано після того, як прокоментували верх, тому що я отримував помилку:

Попередження 2 Виявлені конфлікти між різними версіями однієї і тієї ж залежної збірки, які неможливо було вирішити. Ці конфліктні довідники перераховані в журналі збірки, коли докладно встановлено детальний опис журналу.

і позбавлення від жорстких прив’язок було це виправленням.


1
Ви видалили Microsoft.AspNet.Web.Helpers.Mvcспочатку?
— Блейз

подивіться на мою відповідь stackoverflow.com/a/20653546/3114457 вона повинна виправити ваші проблеми з міграцією
— Livius

5
Будь ласка, позначте stackoverflow.com/a/21514748/2343 як правильну відповідь!
— Sameer Alibhai

Відповіді:


271

Йому потрібна system.web.http.webhost, яка є частиною цього пакету. Я це виправив, встановивши наступний пакет:

PM> Install-Package Microsoft.AspNet.WebApi.WebHost 

або шукайте його в https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0


Додано автоматично, коли я додав контролер API. Мені довелося перезапустити VS2015, щоб розпочати його. Я також робив все, що рекомендується на цій сторінці, щоб не бути впевненим у тому, що було справжньою проблемою.
— Пьотр Кула

6
Це не працювало для мене. Пакет вже встановлений у моєму проекті.
— Шиммі Вайцхандлер

Цікавим було те, що веб-хостинг вже встановлений і все ще не працює, то я змінив порядок, в який GlobalConfiguration.Configure(WebApiConfig.Register);було вставлено в global.asax вгору відразу після AreaRegistration, і він працював чудово.
— PedroSouki

чому вони нічого подібного не написали? мені знадобиться півгодини, щоб знайти вашу відповідь
— Homayoun Behzadian,

Працював для мене після оновлення Microsoft.AspNet.WebApi.WebHostдо останньої версії
— Пітер ван Кекем

86

Жодна з цих ідей не допомогла моєму проекту, використовуючи MVC 5.2.2.

  • System.web.Http 5.2.2 вже встановлений
  • Видалення папки Packages і повне завантаження всіх бібліотек NuGet нічого не зробили
  • Web.config вже мав залежну записАссемблення для System.Web.Http

Примусове перевстановлення усунула проблему. З консолі менеджера пакунків NuGet:

update-Package -reinstall Microsoft.AspNet.WebApi.WebHost


1
У мене була така ж проблема, але перевстановлення не виправило її, принаймні, це виглядало так і викликало гайки, мені довелося перезапустити VS2015, і це розібралося.
— Пьотр Кула

Схоже, комбінація перезапуску vs2013 + перевстановлення вирішило проблему для мене
— Ram

43

GlobalConfigurationклас є частиною Microsoft.AspNet.WebApi.WebHostнаборів пакетів ... Ви оновили цей пакет до Web API 2?


1
Так. Це версія 5.0.0
— nzondlo

1
у вас, можливо, у вашій web.config є якісь переадресації, що зв'язують обов'язки? якщо так, ви можете поділитися ними ... Я спеціально дивлюсь, чи є які-небудь пов’язані з системами System.Web.Http * ..
— Kiran Challa

Я щойно опублікував усі свої збірки.
— nzondlo

30

Окрім використання консолі менеджера пакунків, щоб отримати необхідний для оновлення проекту за допомогою Install-Package Microsoft.AspNet.WebApi.WebHost для відсутності GlobalConfiguration ,

Мені знадобився Install-Package Microsoft.AspNet.WebApi.SelfHost для відсутності за допомогою System.Web.Http;


1
Чи можете ви пояснити трохи більше?
— Дітер Мемкен

10

Ви можете перевірити, чи Microsoft.AspNet.WebApi.WebHostвстановлено ваш проект . Як виявляється, у моєму випадку Microsoft.AspNet.WebApi.WebHostбуло встановлено інший проект, але не той конкретний проект, який потребував цього. Перевірте, чи існує така лінія:

<package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.1" targetFramework="net45" />

Якщо цього немає, у вас не Microsoft.AspNet.WebApi.WebHostвстановлено проект. Ви можете встановити за допомогою Nuget Package Manager або через консоль диспетчера пакунків. Щоб встановити з консолі диспетчера пакунків, запустіть цю команду:

Install-Package Microsoft.AspNet.WebApi.WebHost

5

API API GlobalConfiguration.Configure доступний у версії "Microsoft.AspNet.WebApi.WebHost" = "5.2.3"

а не у версії "Microsoft.AspNet.WebApi.WebHost" = "4.0.0"


3

Якщо проблему залишається після видалення та встановлення Microsoft.AspNet.WebApi.WebHost, тоді також додайте підписки в web.config для роботи глобальної конфігурації.

 <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>

Це вже було в моєму web.config. Виникли проблеми (VS2015)
— Пьотр Кула


1

Моя проблема полягала в тому, що менеджер пакунків nuget не здійснив реальне оновлення, але файли містили посилання на старіші версії, тому я спочатку видалив усі встановлені пакети mvc (включаючи бритви та веб-api), потім знову встановив їх та оновив версію бритву у view / web.config до версії 3.0.0.


1

Жодне з цих рішень не працювало на мене. У мене був клубок Nuget-пакетів, які не вдалося оновити через кругову залежність один від одного.

Мені б доводилося це виправляти старомодно. Я створив новий проект MVC / web api і вручну скопіював System.Web.Httpі System.Web.Http.WebHostз нового проекту в папки Nuget рішення exisitng. Звідти я оновив посилання, OMG, "переглянувши" та вирішив проблему.


0

це вирішило цю проблему, додавши простір імен у файл Global.asax.cs.

за допомогою System.Web.Http;

це вирішило це питання.

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