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.