visual tutorial studio net mvc español asp asp.net asp.net-mvc razor asp.net-mvc-4 asp.net-webpages

tutorial - InvalidCastException se lanza después de instalar ASP.NET MVC 4 Beta



install mvc 4 visual studio 2017 (9)

Obtengo la siguiente excepción después de instalar ASP.NET MVC 4 Beta en una máquina con ASP.NET MVC 3.

System.InvalidCastException no fue manejado por el código de usuario Message = [A] System.Web.WebPages.Razor.Configuration.HostSection no se puede convertir a [B] System.Web.WebPages.Razor.Configuration.HostSection. El tipo A se origina de ''System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'' en el contexto ''Default'' en la ubicación ''C: / Windows / Microsoft.Net / assembly / GAC_MSIL / System .Web.WebPages.Razor / v4.0_1.0.0.0__31bf3856ad364e35 / System.Web.WebPages.Razor.dll ''. El tipo B se origina de ''System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'' en el contexto ''Default'' en la ubicación ''C: / Windows / Microsoft.Net / assembly / GAC_MSIL / System .Web.WebPages.Razor / v4.0_2.0.0.0__31bf3856ad364e35 / System.Web.WebPages.Razor.dll ''. Fuente = System.Web.WebPages.Razor

StackTrace:

en System.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection (String virtualPath) en System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig (String virtualPath, String physicalPath) en System.Web.WebPages.Razor.RazorBuildProvider.GetHostFromConfig () en System.Web.WebPages.Razor.RazorBuildProvider.CreateHost () en System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode () en System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType () en System.Web.Compilation.BuildProvider. GetCompilerTypeFromBuildProvider (BuildProvider buildProvider) en System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders () en System.Web.Compilation.BuildProvidersCompiler.PerformBuild () en System.Web.Compilation.BuildManager.CompileWebFile (VirtualPath virtualPath) en System.Web.Compilation. BuildManager.GetVPathBuildResultInternal (VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) a t System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) en System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) en System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists (String virtualPath) en System.Web.Mvc.BuildManagerViewEngine.FileExists (ControllerContext controllerContext, String virtualPath) en System.Web.Mvc .VirtualPathProviderViewEngine.GetPathFromGeneralName (ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String [] y searchesLocations) en System.Web.Mvc.VirtualPathProviderViewEngine.GetPath (ControllerContext controllerContext, String [] ubicaciones, String [] areaLocations, String locationsPropertyName, S tring name, String controllerName, String cacheKeyPrefix, Boolean useCache, String [] & searchedLocations) en System.Web.Mvc.VirtualPathProviderViewEngine.FindView (ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) en System.Web.Mvc.ViewEngineCollection. <> c__DisplayClassc.b__b (IViewEngine e) en System.Web.Mvc.ViewEngineCollection.Find (Func`2 lookup, Boolean trackSearchedPaths) en System.Web.Mvc.ViewEngineCollection.FindView (ControllerContext controllerContext, String viewName, String masterName) en System .Web.Mvc.ViewResult.FindView (ControllerContext context) en System.Web.Mvc.ViewResultBase.ExecuteResult (ControllerContext context) en System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) en System.Web.Mvc. ControllerActionInvoker. <> C__DisplayClass1c.b__19 () en System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (Filtro IResultFilter, ResultExecutingContext preContext, Fun c`1 continuación) en System.Web.Mvc.ControllerActionInvoker. <> c__DisplayClass1c. <> c__DisplayClass1e.b__1b () en System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) en System. Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) en System.Web.Mvc.Controller.ExecuteCore () en [project_namespace] .Controllers.GlobalizationController.ExecuteCore () en [file_path] en System.Web.Mvc.ControllerBase .Ejecute (RequestContext requestContext) en System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) en System.Web.Mvc.MvcHandler. <> C__DisplayClass6. <> C__DisplayClassb.b__5 () en System .Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass1.b__0 () en System.Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass8`1.b__7 (IAsyncResult _) en System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult `1.End () en System.Web.Mvc.MvcHandler . <> c__DisplayClasse.b__d () en System.Web.Mvc.SecurityUtil.b__0 (Acción f) en System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Acción de acción) en System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) en System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (resultado de IAsyncResult) en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (IExecutionStep paso, booleano y completado sincrónicamente)

Esto me bloquea por completo y, aunque me gustaría conservar la versión beta, es posible que deba eliminarla por completo para eliminar la excepción.


  1. En Visual Studio, cree una nueva aplicación "desechable" ASP.NET MVC 4 en una carpeta separada en alguna parte.
  2. Reemplace el archivo web.config en su carpeta Vistas con el archivo web.config Views recién creado de la nueva aplicación desechable.

Tú lo notarás:

System.Web.WebPages.Razor cambia de la Version=1.0.0.0 a la Version=2.0.0.0 System.Web.Mvc cambia de la Version=3.0.0.0 a la Version=4.0.0.0


En aras de la exhaustividad...

También puede desactivar completamente las páginas web si no las está utilizando.

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

(Todavía no estoy del todo claro sobre la relación entre las vistas de maquinilla de afeitar y las páginas web, pero parece que mi aplicación MVC con vistas a la maquinilla de afeitar todavía funciona con páginas web desactivadas).


Encontré otra forma de hacer que esto funcione, en la línea del blog de un taiwanés sobre la actualización de MVC 2 a MVC 3: http://blog.kkbruce.net/2011_04_01_archive.html (Puedes usar Microsoft Translate en IE10 para ver la versión en inglés y es una traducción bastante buena ...)

El truco está en encontrar todas las versiones que se relacionan con MVC3 (como Razor, Mvc, ensamblajes de ayudantes, sabrá cuáles son si va a sus referencias y revisa todas las versiones más nuevas de su ensamblado referenciado) y los cambia de 1.0.0.0 a 2.0.0.0 y de 3.0.0.0 a 4.0.0.0 (dado que las claves públicas son las mismas). También puede intentar eliminar las versiones según el blog.

Otra cosa importante es que estas configuraciones se encuentran en todos los Web.Configs. Por lo tanto, no solo debajo de su raíz, sino también debajo de Ver, Área / {Área} / Vista, etc.

Siento que esta solución puede permitirle actualizar al MVC4 por completo en lugar de tener un híbrido, que de todos modos no funcionó para mí.


Intente agregar lo siguiente en su web.config:

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

El problema podría deberse a que se registraron varios proveedores de compilación y al último ganador.


Parte de su código se está ejecutando en los bits MVC actuales, mientras que otros se han enviado a los más nuevos. Sin entender el código, no puedo decirte qué bit específico está causando el problema.

Habiendo dicho eso, nunca configuré una versión beta en una máquina de desarrollo de producción. Es muy fácil crear una máquina virtual en estos días y ejecutar la versión beta en una imagen. En Windows 7+, puede arrancar la imagen del metal y no tomar el golpe de percusión, si lo necesita (con las betas de la herramienta de desarrollo, a menudo lo hace).


Si está experimentando este problema y ha intentado las soluciones anteriores y esto no funciona, compruebe el archivo web.config en su carpeta de Vistas. Puede haber algunas configuraciones que entran en conflicto con el archivo Web.config en la carpeta raíz de la aplicación


También como último paso borre su carpeta bin del proyecto de donde proviene el error.


Tuve el mismo problema, pero al migrar ASP.NET MVC 3 a ASP.NET MVC 4. De esta forma me metí en este tema. He encontrado una solución al problema, pero su origen es diferente, no es de la versión de WebPages .

He seguido la guía oficial (por así decirlo) Actualización de un proyecto ASP.NET MVC 3 a ASP.NET MVC 4 .

Para resolver el problema, debe agregar Web.Config (probablemente alrededor de los agregados anteriormente):

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

Tampoco se menciona en las notas para cambiar la referencia de System.Web.Helpers de 1.0.0.0 a 2.0.0.0 (eliminar y agregar el nuevo).


Una solución más, bastante tarde ... Me encontré con este mismo problema. Hizo todas las correcciones enumeradas aquí (¡Gracias a todos!) Pero no pude pasar el error. Finalmente, desesperado, encontré un archivo web.config en el directorio de Vistas. En este archivo, encontré varias referencias a la versión de System.Web.Mvc y las superé hasta "4.0.0.0". Más importante aún, encontré las siguientes líneas y actualicé los números de versión para "system.web.webPages.Razor" de "1.0.0.0" a "2.0.0.0" y de repente, todo estaba funcionando una vez más. Con suerte, esto ayudará a alguien más.

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