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ą.
źródło
Microsoft.AspNet.Web.Helpers.Mvc
?Odpowiedzi:
Potrzebuje system.web.http.webhost, który jest częścią tego pakietu. Naprawiłem to, instalując następujący pakiet:
lub wyszukaj go w nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0
źródło
GlobalConfiguration.Configure(WebApiConfig.Register);
został wstawiony w global.asax na górę tuż po AreaRegistration i działało dobrze.Microsoft.AspNet.WebApi.WebHost
do najnowszej wersjiŻaden z tych pomysłów nie pomógł w moim projekcie przy użyciu MVC 5.2.2.
Wymuszenie ponownej instalacji rozwiązało problem. Z konsoli menedżera pakietów NuGet:
update-Package -reinstall Microsoft.AspNet.WebApi.WebHost
źródło
GlobalConfiguration
class jest częściąMicrosoft.AspNet.WebApi.WebHost
pakietu NuGet ... Czy uaktualniono ten pakiet do interfejsu API sieci Web 2?źródło
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;
źródło
Możesz chcieć sprawdzić, czy Twój projekt został
Microsoft.AspNet.WebApi.WebHost
zainstalowany. Jak się okazuje, w moim przypadkuMicrosoft.AspNet.WebApi.WebHost
został zainstalowany w innym projekcie, ale nie w konkretnym projekcie, który tego potrzebował. W pliku packages.config sprawdź, czy jest tam taka linia:Jeśli tego nie ma, nie masz
Microsoft.AspNet.WebApi.WebHost
zainstalowanego 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:źródło
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”
źródło
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
źródło
„Install-Package Microsoft.AspNet.WebApi.Core” działał dobrze.
źródło
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.
źródło
Ż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.Http
izSystem.Web.Http.WebHost
nowego projektu do folderów Nuget istniejącego rozwiązania. Stamtąd zaktualizowałem odniesienia przez, OMG, „przeglądając” i naprawiłem problem.źródło
rozwiązało to problem przez dodanie przestrzeni nazw do pliku Global.asax.cs.
using System.Web.Http;
to rozwiązało problem.
źródło