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.