InvalidCastException wird nach der Installation von ASP.NET MVC 4 Beta ausgelöst

81

Nach der Installation von ASP.NET MVC 4 Beta auf einem Computer mit ASP.NET MVC 3 wird die folgende Ausnahme angezeigt.

System.InvalidCastException wurde vom Benutzercode Message = [A] System.Web.WebPages.Razor.Configuration.HostSection wurde nicht in [B] System.Web.WebPages.Razor.Configuration.HostSection umgewandelt. Typ A stammt aus 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' im Kontext 'Default' am Speicherort '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 stammt aus 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' im Kontext 'Default' am Speicherort 'C: \ Windows \ Microsoft.Net \ Assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0. 0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Source = System.Web.WebPages.Razor

StackTrace:

at System.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection (String virtualPath) at System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig (String virtualPath, String PhysicalPath) at System.Web.WebPages.Raz.Raz.Razor System.Web.WebPages.Razor.RazorBuildProvider.CreateHost () unter System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode () unter System.Web.WebPages.Razor.RazorBuildProvider.omp.CodeComp. GetCompilerTypeFromBuildProvider (BuildProvider buildProvider) unter System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders () unter System.Web.Compilation.BuildProvidersCompiler.PerformBuild () unter System.Web.Comp.CompileWebFile (VirtualPath virtualPath) bei System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) bei System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (Httpcontext Zusammenhang VirtualPath virtualPath , Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean sureIsUpToDate) bei System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory Web.Mvc.IBuildManager.FileExists (String virtualPath) unter System.Web.Mvc.BuildManagerViewEngine.FileExists (ControllerContext controllerContext, String virtualPath) unter System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName (ControllerContext controllerContext, List`1-Speicherorte, Stringname, String controllerName, String areaName, String cacheKey, String [] & searchedWocations). Mvc.VirtualPathProviderViewEngine.GetPath (ControllerContext controllerContext, String [] -Standorte, String [] areaLocations, String-StandortePropertyName, String-Name, String-Controller-Name, String-CacheKeyPrefix, Boolean useCache, String [] & searchedLocations) bei System.Web.Vir (ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) bei System.Web.Mvc.ViewEngineCollection. <> C__DisplayClassc.b__b (IViewEngine e) bei System.Web.Mvc.ViewEngineCollection.Find (Func`2-Suche, Boolean trackSearchedPaths) bei System.Web.Mvc.ViewEngineCollection.FindView (ControllerContext controllerContext, String viewName, String masterName) bei System.Web .ViewResult.FindView (ControllerContext-Kontext) bei System.Web.Mvc.ViewResultBase.ExecuteResult (ControllerContext-Kontext) bei System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) c__DisplayClass1c.b__19 () bei System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter-Filter, ResultExecutingContext preContext, Func`1-Fortsetzung) bei System.Web.Mvc.ControllerActionInvoker. <> c__D> c__DisplayClass1e.b__1b () bei System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controllerContext, IList`1-Filter, ActionResult actionResult) bei System.Web.Mvc.ControllerActionInvoker.ControllerActionInvoker.ControllerActionInvoker. Mvc.Controller.ExecuteCore () unter [project_namespace] .Controllers.GlobalizationController.ExecuteCore () unter [file_path] unter System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) unter System.Web.Mvc.ControllerBase. Mvc.IController.Execute (RequestContext requestContext) bei System.Web.Mvc.MvcHandler. <> C__DisplayClass6. <> C__DisplayClassb.b__5 () bei System.Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass1.b. Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass8`1.b__7 (IAsyncResult _) bei System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () bei System.Web.Mvc.MvcHandler. <> C System.Web.Mvc.SecurityUtil.b__0 (Aktion f) unter System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Aktionsaktion) unter System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) unter Systemc.MvM. System.Web.IHttpAsyncHandler.EndProcessRequest (IAsyncResult-Ergebnis) bei System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () bei System.Web.HttpecSecu.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () bei System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () bei System.Web.Mvc.SecurityUtil.b__0 (Aktion f) bei System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (Aktionsaktion) bei System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) bei System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.Er. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () bei System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynchronously)Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () bei System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () bei System.Web.Mvc.SecurityUtil.b__0 (Aktion f) bei System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (Aktionsaktion) bei System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) bei System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.Er. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () bei System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynchronously)b__0 (Aktion f) bei System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Aktionsaktion) bei System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) bei System.Web.Mvc.MvcHandler.System.Wep. IAsyncResult-Ergebnis) bei System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () bei System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynously)b__0 (Aktion f) bei System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Aktionsaktion) bei System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) bei System.Web.Mvc.MvcHandler.System.Wep. IAsyncResult-Ergebnis) bei System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () bei System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynously)HttpApplication.IExecutionStep.Execute () bei System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynchronously)HttpApplication.IExecutionStep.Execute () bei System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynchronously)

Dies blockiert mich vollständig und obwohl ich die Beta behalten möchte, muss ich sie möglicherweise vollständig entfernen, um die Ausnahme zu beseitigen.

Nikos Baxevanis
quelle
1
Führen Sie zufällig .net 4.5 Dev Preview aus? (Dieser ist nicht kompatibel mit der aktuellen Beta-Version) (nur zur Veranschaulichung, war nicht ich, der herabgestimmt hat, die Frage ist legitim)
Michael Stum
1
Nein, ich führe die 4.5 überhaupt nicht aus.
Nikos Baxevanis
3
Im Ernst, warum wird dies abgelehnt? Ich gebe Feedback für etwas, das anderen passieren könnte.
Nikos Baxevanis
@ MichaelStum OK, keine Sorge. :)
Nikos Baxevanis
Entschuldigung für die Verwirrung. Ich habe versucht, diese Frage zu "favorisieren" und falsch geklickt = P Downvote entfernt, Favorit diesmal korrekt hinzugefügt.
Josh Darnell

Antworten:

31

Versuchen Sie, Folgendes in Ihre web.config einzufügen:

<appSettings>
  <add key="webpages:Version" value="1.0.0.0"/>
</appSettings>

Das Problem kann darauf zurückzuführen sein, dass mehrere Build-Anbieter registriert sind und der letzte Gewinn erzielt wurde.

Marcind
quelle
101

Ich hatte das gleiche Problem, aber bei der Migration von ASP.NET MVC 3 zu ASP.NET MVC 4. Auf diese Weise kam ich zu diesem Thema. Ich habe eine Lösung für das Problem gefunden, aber die Quelle ist anders, es ist nicht von der WebPagesVersion.

Ich habe die offizielle Anleitung (sozusagen) zum Aktualisieren eines ASP.NET MVC 3-Projekts auf ASP.NET MVC 4 befolgt .

Um das Problem zu beheben, müssen Sie in Web.Config hinzufügen (wahrscheinlich um zuvor hinzugefügte):

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

Auch in den Notizen wird nicht erwähnt, um die Referenz von System.Web.Helpers von 1.0.0.0 auf 2.0.0.0 zu ändern (löschen und die neue hinzufügen).

Rolice
quelle
2
+1 Vielen Dank für das Teilen. Eine geringfügige Änderung, die ich vorgenommen habe, bestand darin, oldVersion="1.0.0.0-2.0.0.0"nur die in der MVC4-Projektvorlage verwendete Konvention zu befolgen. Interessanterweise fehlt das dependentAssemblyfor System.Web.WebPages.Razorauch in der Root- Datei Web.config in der MVC4-Projektvorlage.
Scotty.NET
1
Ich hatte ein ähnliches Problem beim Aktualisieren von MVC 4 NuGet-Paketen auf 5.1.1, das mit dem oben genannten Problem behoben wurde, aberoldVersion="2.0.0.0" newVersion="3.0.0.0"
Luke Puplett
34

Noch eine, ziemlich späte Lösung ... Ich bin auf dasselbe Problem gestoßen. Habe alle hier aufgeführten Korrekturen durchgeführt (Danke an alle !!!), konnte aber den Fehler nicht überwinden. Schließlich fand ich verzweifelt eine web.config-Datei im Views-Verzeichnis. In dieser Datei habe ich mehrere Verweise auf die Version von System.Web.Mvc gefunden und alle auf "4.0.0.0" erhöht. Noch wichtiger ist, dass ich die folgenden Zeilen gefunden und die Versionsnummern für "system.web.webPages.Razor" von "1.0.0.0" auf "2.0.0.0" aktualisiert habe und plötzlich alles wieder funktionierte. Hoffentlich hilft das jemand anderem.

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

Steve G.
quelle
1
Vergessen Sie auch nicht die Datei web.config unter Bereiche / Ansichten, wenn Sie Bereiche verwenden.
Antonin Jelinek
5

Ich habe einen anderen Weg gefunden, um dies zum Laufen zu bringen , entlang eines taiwanesischen Blogs zum Upgrade von MVC 2 auf MVC 3: http://blog.kkbruce.net/2011_04_01_archive.html (Sie können Microsoft Translate in IE10 tatsächlich verwenden, um zu sehen die englische Version und es ist eine ziemlich gute Übersetzung ...)

Der Trick besteht darin, alle Versionen zu finden, die sich auf MVC3 beziehen (z. B. Razor-, Mvc- und Helper-Assemblys. Sie werden wissen, was sie sind, wenn Sie zu Ihren Referenzen gehen und alle neueren Versionen Ihrer referenzierten Assemblys überprüfen) und sie ändern 1.0.0.0 bis 2.0.0.0 und von 3.0.0.0 bis 4.0.0.0 (da die öffentlichen Schlüssel identisch sind). Sie können auch versuchen, die Versionen gemäß dem Blog zu entfernen.

Ein weiterer wichtiger Punkt ist, dass diese Einstellungen in allen Web.Configs enthalten sind. Also nicht nur unter Ihrem Stamm, sondern auch unter Ansicht, Bereich / {Bereich} / Ansicht usw.

Ich bin der Meinung, dass Sie mit dieser Lösung ein vollständiges Upgrade auf die MVC4 durchführen können, anstatt einen Hybrid zu haben, der für mich sowieso nicht funktioniert hat.

laorient
quelle
4
  1. Erstellen Sie in Visual Studio eine neue "wegwerfbare" ASP.NET MVC 4-Anwendung in einem separaten Ordner.
  2. Ersetzen Sie die Datei web.config in Ihrem Views-Ordner durch die frisch erstellte Views web.config-Datei aus der neuen Wegwerfanwendung.

Du wirst bemerken:

System.Web.WebPages.RazorÄnderungen von Version=1.0.0.0zu Version=2.0.0.0 System.Web.MvcÄnderungen von Version=3.0.0.0bisVersion=4.0.0.0

James Lawruk
quelle
3

Wenn dieses Problem auftritt und Sie die oben genannten Lösungen ausprobiert haben und dies nicht funktioniert, überprüfen Sie bitte die Datei web.config in Ihrem Ordner "Ansichten". Möglicherweise gibt es einige Konfigurationen, die mit der Datei Web.config in Ihrem App-Stammordner in Konflikt stehen

user1047559
quelle
0

Ein Teil Ihres Codes wird auf den aktuellen MVC-Bits ausgeführt, während andere auf die neuere Version verschoben wurden. Ohne den Code zu verstehen, kann ich Ihnen nicht sagen, welches bestimmte Bit das Problem verursacht.

Trotzdem würde ich niemals eine Beta auf einer Produktionsentwicklungsmaschine einrichten. Es ist heutzutage zu einfach, eine VM zu erstellen und die Beta auf einem Image auszuführen. In Windows 7+ können Sie das Image vom Metall booten und nicht den Perf-Hit ausführen, wenn Sie dies benötigen (mit Dev-Tool-Betas tun Sie dies häufig).

Gregory A Beamer
quelle
Ja, aber diese Beta hat eine Go-Live-Lizenz. Immerhin ist es auf einer VM, aber die VM hat auch ASP.NET MVC 3.
Nikos Baxevanis
Sie müssen bestimmen, welches Bit in 3 in 4 ausgeführt wird, da dort der Konflikt auftritt. Dasselbe geschah ziemlich oft in Web Forms, als sie in den .NET 2-Zeitrahmen wechselten, und war ein ziemliches Problem mit Add-Ons (wie MVC?).
Gregory A Beamer
Eigentlich ist es ein sehr großes ASP.NET MVC 3-Projekt. In 4 läuft nichts. Ich konnte das 3-Projekt nicht starten, das ist alles. Das Hinzufügen des <add key = "webpages: Version" value = "1.0.0.0" /> im appSettings-Element hat das Problem behoben.
Nikos Baxevanis
0

Der Vollständigkeit halber...

Sie können Webseiten auch ganz deaktivieren, wenn Sie sie nicht verwenden.

<appSettings>
    <add key="webpages:Enabled" value="false" />
</appSettings>

(Die Beziehung zwischen Rasiermesseransichten und Webseiten ist mir noch nicht ganz klar, aber meine MVC-App mit Rasiermesseransichten funktioniert anscheinend immer noch mit deaktivierten Webseiten.)

Peter
quelle
0

Löschen Sie auch als letzten Schritt Ihren Bin-Ordner aus dem Projekt, von dem der Fehler stammt.

natdev1
quelle