Po zainstalowaniu ASP.NET MVC 4 Beta na komputerze z ASP.NET MVC 3 pojawia się następujący wyjątek.
Wyjątek System.InvalidCastException nie został obsłużony przez kod użytkownika. Message = [A] System.Web.WebPages.Razor.Configuration.HostSection nie może zostać przesłany do [B] System.Web.WebPages.Razor.Configuration.HostSection. Typ A pochodzi z „System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Typ B pochodzi z „System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0. 0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Źródło = System.Web.WebPages.Razor
Ślad stosu:
at System.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection (String virtualPath) w System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig (String virtualPath, String physicalPath) at System.Web.WebPages.Razor.Razor.Build () System.Web.WebPages.Razor.RazorBuildProvider.CreateHost () w System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode () w System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompiler.WebProvider. GetCompilerTypeFromBuildProvider (BuildProvider buildProvider) w System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders () w System.Web.Compilation.BuildProvidersCompiler.PerformBuild () w System.Web.Compilation.BuildManager.CompileWebFile (ścieżka_wirtualna ścieżka_wirtualna) w System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (ścieżka_wirtualna ścieżka_wirtualna, logicznej noBuild, logicznej allowCrossApp, logicznej allowBuildInPrecompile, logicznej throwIfNotFound, logiczna ensureIsUpToDate) w System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (HttpContext kontekście ścieżka_wirtualna ścieżka_wirtualna , Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean secureIsUpToDate) at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, Boolean secureIsUpToDate) at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, Boolean secureIsUpToDate) w System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, Boolean secureIsUpToDate) Web.Mvc.IBuildManager.FileExists (String virtualPath) w System.Web.Mvc.BuildManagerViewEngine.FileExists (ControllerContext controllerContext, String virtualPath) w System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName (ControllerContext controllerContext, List`1 location, String name, String controllerName, String areaName, String cacheKey, String [] &earchLocations) w System.Web. Mvc.VirtualPathProviderViewEngine.GetPath (ControllerContext controllerContext, String [] locations, String [] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String [] &earchLocations) at System.Web.Mvc.VindtualView (ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) w System.Web.Mvc.ViewEngineCollection. <> C__DisplayClassc.b__b (IViewEngine e) w System.Web.Mvc.ViewEngineCollection.Find (Func`2 lookup, Boolean trackSearchedPaths) at System.Web.Mvc.ViewEngineCollection.FindView (ControllerContext controllerContext, String viewName, String masterName) at System.Web.Mvc .ViewResult.FindView (kontekst ControllerContext) w System.Web.Mvc.ViewResultBase.ExecuteResult (kontekst ControllerContext) w System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) w System.Web.Mvoker. c__DisplayClass1c.b__19 () w System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtr IResultFilter, ResultExecutingContext preContext, kontynuacja Func`1) w System.Web.Mvc.ControllerActionInvoker. <> c__cDisplay. <Class.> c__DisplayClass1e.b__1b () w System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controllerContext, filtry IList`1, ActionResult actionResult) w System.Web.Mvc.ControllerActionResultWithFilters (ControllerContext controllerContext, filtry IList`1, ActionResult actionResult) w System.Web.Mvc.ControllerActionResultWithFilters (ControllerContext controllerContext, filtry IList`1, ActionResult actionResult) w System.Web.Mvc.ControllerActionInvoker.InvokeAction kontroler (ControllerCext). Mvc.Controller.ExecuteCore () w [project_namespace] .Controllers.GlobalizationController.ExecuteCore () w [file_path] w System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) w System.Web.Mvc.ControllerBase.System.Web. Mvc.IController.Execute (RequestContext requestContext) w System.Web.Mvc.MvcHandler. <> C__DisplayClass6. <> C__DisplayClassb.b__5 () at System.Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass1. Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass8`1.b__7 (IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () at System.Web.Mvc.MvcHandler. System. System.Web.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () w System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () w System.Web.Mvc.SecurityUtil.b__0 (działanie f) w System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (akcja akcji) w System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) w System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandsler.End.EndAequpl (wynik IHttpAsyncHandsler.End) CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () w System.Web.HttpApplication.ExecuteStep (krok IExecutionStep, wartość logiczna i zakończonaSynchronicznie)Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () w System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () w System.Web.Mvc.SecurityUtil.b__0 (działanie f) w System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (akcja akcji) w System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) w System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandsler.End.EndAequpl (wynik IHttpAsyncHandsler.End) CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () w System.Web.HttpApplication.ExecuteStep (krok IExecutionStep, wartość logiczna i zakończonaSynchronicznie)b__0 (akcja f) w System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (akcja akcji) w System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) w System.Web.Mvc.MvcHandler.System.Webs.IHttcHandler.System.Webs.IHttroc IAsyncResult result) w System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () w System.Web.HttpApplication.ExecuteStep (IExecutionStep krok, Boolean i zakończonoSynchronicznie)b__0 (akcja f) w System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (akcja akcji) w System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) w System.Web.Mvc.MvcHandler.System.Webs.IHttcHandler.System.Webs.IHttroc IAsyncResult result) w System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () w System.Web.HttpApplication.ExecuteStep (IExecutionStep krok, Boolean & CompleteSynchronously)HttpApplication.IExecutionStep.Execute () at System.Web.HttpApplication.ExecuteStep (krok IExecutionStep, wartość logiczna i zakończonaSynchronicznie)HttpApplication.IExecutionStep.Execute () at System.Web.HttpApplication.ExecuteStep (krok IExecutionStep, wartość logiczna i zakończonaSynchronicznie)
To mnie całkowicie blokuje i chociaż chciałbym zachować wersję beta, być może będę musiał całkowicie ją usunąć, aby pozbyć się wyjątku.
źródło
Odpowiedzi:
Spróbuj dodać następujące elementy w swoim pliku web.config:
<appSettings> <add key="webpages:Version" value="1.0.0.0"/> </appSettings>
Problem może wynikać z rejestracji wielu dostawców kompilacji i ostatniej wygranej.
źródło
Miałem ten sam problem, ale podczas migracji ASP.NET MVC 3 do ASP.NET MVC 4. Tak dotarłem do tego tematu. Znalazłem rozwiązanie problemu, ale jego źródło jest inne, nie pochodzi z
WebPages
wersji.Postępowałem zgodnie z oficjalnym przewodnikiem (że tak powiem) Uaktualnianie projektu ASP.NET MVC 3 do ASP.NET MVC 4 .
Aby rozwiązać problem, musisz dodać w Web.Config (prawdopodobnie wokół wcześniej dodanych):
<runtime><!-- Should be there by default, near end --> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><!-- Should be there by default --> <dependentAssembly>..</dependentAssembly><!-- Should be there by default --> ... some other dependecy redirects ... <dependentAssembly> <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/> </dependentAssembly> ... some other dependency redirects ... </assemblyBinding> </runtime>
Również w uwagach nie wspomniano o zmianie odniesienia do System.Web.Helpers z 1.0.0.0 na 2.0.0.0 (usuń i dodaj nowy).
źródło
oldVersion="1.0.0.0-2.0.0.0"
tylko konwencji używanej w szablonie projektu MVC4. Co ciekawe,dependentAssembly
forSystem.Web.WebPages.Razor
jest również nieobecny w głównym pliku Web.config w szablonie projektu MVC4.oldVersion="2.0.0.0" newVersion="3.0.0.0"
Jeszcze jedno, dość późne rozwiązanie ... Natknąłem się na ten sam problem. Wykonałem wszystkie wymienione tutaj poprawki (dziękuję wszystkim !!!), ale nie udało mi się obejść błędu. W końcu w desperacji znalazłem plik web.config w katalogu Views. W tym pliku znalazłem kilka odniesień do wersji System.Web.Mvc i podrzuciłem je wszystkie do wersji „4.0.0.0”. Co ważniejsze, znalazłem następujące wiersze i zaktualizowałem numery wersji dla „system.web.webPages.Razor” z „1.0.0.0” do „2.0.0.0” i nagle wszystko znów działało. Miejmy nadzieję, że pomoże to komuś innemu.
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup>
Steve G.
źródło
Znalazłem inny sposób, aby to zadziałało, podobnie jak blog Tajwańczyka dotyczący aktualizacji z MVC 2 do MVC 3: http://blog.kkbruce.net/2011_04_01_archive.html (możesz użyć Tłumacza Microsoft w IE10, aby zobaczyć angielska wersja i jest to całkiem dobre tłumaczenie ...)
Sztuczka polega na znalezieniu wszystkich wersji, które odnoszą się do MVC3 (takich jak zestawy Razor, Mvc, Helper, dowiesz się, czym one są, jeśli przejdziesz do odwołań i sprawdzisz wszystkie nowsze wersje zestawu, do którego się odwołujesz) i zmienisz je z 1.0.0.0 do 2.0.0.0 i od 3.0.0.0 do 4.0.0.0 (ponieważ klucze publiczne są takie same). Możesz także spróbować usunąć wersje zgodnie z blogiem.
Kolejną ważną rzeczą jest to, że te ustawienia znajdują się we wszystkich plikach Web.Configs. Więc nie tylko pod Twoim rootem, ale także w widoku, obszarze / {obszar} / widoku itp.
Czuję, że to rozwiązanie może pozwolić ci całkowicie uaktualnić do MVC4 zamiast mieć hybrydę, która i tak nie działała dla mnie.
źródło
Zauważysz:
System.Web.WebPages.Razor
zmienia się zVersion=1.0.0.0
naVersion=2.0.0.0
System.Web.Mvc
zmiany zVersion=3.0.0.0
naVersion=4.0.0.0
źródło
Jeśli masz ten problem i wypróbowałeś powyższe rozwiązania, ale to nie działa, sprawdź plik web.config w folderze Widoki. Mogą istnieć pewne konfiguracje, które powodują konflikt pliku Web.config w folderze głównym aplikacji
źródło
Część twojego kodu działa na bieżących bitach MVC, podczas gdy inne zostały wypchnięte do nowszych. Bez zrozumienia kodu nie mogę powiedzieć, który konkretny bit powoduje problem.
Powiedziawszy to, nigdy nie uruchomiłbym wersji beta na maszynie produkcyjnej. W dzisiejszych czasach utworzenie maszyny wirtualnej i uruchomienie wersji beta na obrazie jest zbyt łatwe. W systemie Windows 7+, możesz uruchomić obraz z metalu i nie przyjmować najlepszego trafienia, jeśli tego potrzebujesz (z narzędziami deweloperskimi w wersji beta, często to robisz).
źródło
Ze względu na kompletność ...
Możesz też całkowicie wyłączyć strony internetowe, jeśli ich nie używasz.
<appSettings> <add key="webpages:Enabled" value="false" /> </appSettings>
(Nadal nie mam całkowitej jasności co do relacji między widokami maszynki do golenia a stronami internetowymi, ale wydaje mi się, że moja aplikacja MVC z widokami maszynki do golenia nadal działa z wyłączonymi stronami internetowymi).
źródło
Jako ostatni krok wyczyść folder bin z projektu, z którego pochodzi błąd.
źródło