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


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


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


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?


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;


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

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”


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>

To było już w moim web.config. Nadal mam problem (VS2015)
— Piotr Kula


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.


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.


0

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

using System.Web.Http;

to rozwiązało problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.