GlobalConfiguration.Configure () nie występuje po migracji interfejsu API sieci Web 2 i .NET 4.5.1

148

Niedawno zacząłem postępować zgodnie z tym przewodnikiem, aby przeprowadzić migrację projektu do .NET 4.5.1 i Web Api 2.

Pierwszą rzeczą, o którą prosi programista MS Rick Anderson, jest zmiana:

WebApiConfig.Register(GlobalConfiguration.Configuration);

do

GlobalConfiguration.Configure(WebApiConfig.Register);

w pliku global.asax. Jednak powoduje to błąd, gdy próbuję zbudować:

Błąd 1 „System.Web.Http.GlobalConfiguration” nie zawiera definicji „Configure”

Mój projekt jest obecnie na MVC 5 i Web Api 2 oraz .NET 4.5.1, ale myślę, że System.Web.Http nadal uważa, że ​​jest to wersja .NEt 4.0.

Jak mogę to naprawić?

Dziękuję Ci.

Edytować:

Oto moje wiązania montażowe:

<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>

Wszystko skomentowane po skomentowaniu góry, ponieważ otrzymywałem błąd:

Ostrzeżenie 2 Znaleziono konflikty między różnymi wersjami tego samego zestawu zależnego, których nie można rozwiązać. Te konflikty odwołań są wymienione w dzienniku kompilacji, gdy szczegółowość dziennika jest ustawiona na szczegółową.

a pozbycie się twardych wiązań było to naprawą.

nzondlo
źródło
1
Czy najpierw odinstalowałeś Microsoft.AspNet.Web.Helpers.Mvc?
Blaise
spójrz na moją odpowiedź stackoverflow.com/a/20653546/3114457 to powinno rozwiązać twoje problemy z migracją
Livius
5
Oznacz stackoverflow.com/a/21514748/2343 jako poprawną odpowiedź!
Sameer Alibhai

Odpowiedzi:

271

Potrzebuje system.web.http.webhost, który jest częścią tego pakietu. Naprawiłem to, instalując następujący pakiet:

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

lub wyszukaj go w nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

Tyrone Moodley
źródło
Został dodany automatycznie po dodaniu kontrolera API. Musiałem ponownie uruchomić VS2015, aby go uruchomić. Zrobiłem też wszystko inne zalecane na tej stronie, więc nie jestem pewien, jaki był rzeczywisty problem.
Piotr Kula
6
To mi się nie udało. Pakiet jest już zainstalowany w moim projekcie.
Shimmy Weitzhandler,
Ciekawe było to, że webhost był już zainstalowany i nadal nie działa, potem zmieniam kolejność, w jakiej GlobalConfiguration.Configure(WebApiConfig.Register);został wstawiony w global.asax na górę tuż po AreaRegistration i działało dobrze.
PedroSouki
dlaczego nie napisali czegoś takiego? znalezienie odpowiedzi zajmuje mi pół godziny
Homayoun Behzadian,
Pracowało dla mnie po aktualizacji Microsoft.AspNet.WebApi.WebHostdo najnowszej wersji
Peter van Kekem
86

Żaden z tych pomysłów nie pomógł w moim projekcie przy użyciu MVC 5.2.2.

  • System.web.Http 5.2.2 został już zainstalowany
  • Usunięcie folderu Packages i całkowite ponowne pobranie wszystkich bibliotek NuGet nic nie dało
  • Web.config miał już wpis zależny od zespołu System.Web.Http

Wymuszenie ponownej instalacji rozwiązało problem. Z konsoli menedżera pakietów NuGet:

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

Charles Burns
źródło
1
Miałem ten sam problem, ale ponowna instalacja go nie rozwiązała, przynajmniej tak wyglądało i doprowadzało mnie do szału, musiałem zrestartować VS2015 i to się udało.
Piotr Kula
Wygląda na to, że kombinacja restartu vs2013 + ponowna instalacja rozwiązała problem dla mnie
Ram
43

GlobalConfigurationclass jest częścią Microsoft.AspNet.WebApi.WebHostpakietu NuGet ... Czy uaktualniono ten pakiet do interfejsu API sieci Web 2?

Kiran Challa
źródło
1
Tak. To wersja 5.0.0
nzondlo
1
czy zdarzy się, że masz jakieś przekierowania wiązania zestawu w swoim web.config? jeśli tak, czy mógłbyś je udostępnić ... specjalnie szukam, czy są jakieś związane z zespołami System.Web.Http * ..
Kiran Challa
Właśnie opublikowałem wszystkie moje powiązania zespołu.
nzondlo
30

Oprócz korzystania z konsoli Menedżera pakietów, aby uzyskać nuget w celu zaktualizowania projektu za pomocą pakietu Install-Package Microsoft.AspNet.WebApi.WebHost w przypadku braku GlobalConfiguration ,

Potrzebowałem pakietu Install-Package Microsoft.AspNet.WebApi.SelfHost za brak korzystania z System.Web.Http;

Tyeth
źródło
1
Czy możesz wyjaśnić trochę więcej?
Dieter Meemken
10

Możesz chcieć sprawdzić, czy Twój projekt został Microsoft.AspNet.WebApi.WebHostzainstalowany. Jak się okazuje, w moim przypadku Microsoft.AspNet.WebApi.WebHostzostał zainstalowany w innym projekcie, ale nie w konkretnym projekcie, który tego potrzebował. W pliku packages.config sprawdź, czy jest tam taka linia:

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

Jeśli tego nie ma, nie masz Microsoft.AspNet.WebApi.WebHostzainstalowanego w swoim projekcie. Możesz zainstalować za pomocą Menedżera pakietów Nuget lub za pośrednictwem konsoli Menedżera pakietów. Aby zainstalować z konsoli Menedżera pakietów, uruchom to polecenie:

Install-Package Microsoft.AspNet.WebApi.WebHost
Cameron Tinker
źródło
5

Interfejs API GlobalConfiguration.Configure jest dostępny w wersji „Microsoft.AspNet.WebApi.WebHost” = „5.2.3”

a nie w wersji „Microsoft.AspNet.WebApi.WebHost” = „4.0.0”

user3508883
źródło
3

Jeśli problem nadal występuje po odinstalowaniu i zainstalowaniu Microsoft.AspNet.WebApi.WebHost, dodaj również następujące elementy w pliku web.config, aby globalna konfiguracja działała

 <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>
ratneshsinghparihar
źródło
To było już w moim web.config. Nadal mam problem (VS2015)
Piotr Kula
2

„Install-Package Microsoft.AspNet.WebApi.Core” działał dobrze.

Terry Mosoma
źródło
1

Mój problem polegał na tym, że menedżer pakietów NuGet nie wykonał prawdziwej aktualizacji, ale pliki zawierały odniesienia do starszych wersji, więc najpierw usunąłem wszystkie zainstalowane pakiety związane z mvc (w tym razor i interfejs API), a następnie zainstalowałem je ponownie i zaktualizowałem wersję brzytwa w views / web.config do wersji 3.0.0.

Soniku
źródło
1

Żadne z tych rozwiązań nie działało dla mnie. Miałem plątaninę pakietów Nuget, których nie można zaktualizować z powodu wzajemnych zależności cyklicznych.

Musiałbym to naprawić w staroświecki sposób. Utworzyłem nowy projekt MVC / web api i ręcznie skopiowałem System.Web.Httpiz System.Web.Http.WebHostnowego projektu do folderów Nuget istniejącego rozwiązania. Stamtąd zaktualizowałem odniesienia przez, OMG, „przeglądając” i naprawiłem problem.

Micah B.
źródło
0

rozwiązało to problem przez dodanie przestrzeni nazw do pliku Global.asax.cs.

using System.Web.Http;

to rozwiązało problem.

user1661290
źródło