Recibo 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 se manejó con 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 en '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 en '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.WebromGost System.Web.WebPages.Razor.RazorBuildProvider.CreateHost () en System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode () en System.Web.WebPages.Razor.RazorBuildr. 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. , Booleano noBuild, booleano allowCrossApp, booleano allowBuildInPrecompile, booleano throwIfNotFound, booleano asegureIsUpToDate) en System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, HolepConbjectFactory, Boolean. 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 ubicaciones, String name, String controllerName, String areaName, String cacheKey, String [] y buscadasLocations) en System.Web. Mvc.VirtualPathProviderViewEngine. (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 (búsqueda de Func`2, Boolean trackSearchedPaths) en System.Web.Mvc.ViewEngineCollection.FindView (ControllerContext controllerContext, String viewName, String masterName) en System.Web.Mvc .ViewResult.FindView (contexto ControllerContext) en System.Web.Mvc.ViewResultBase.ExecuteResult (contexto ControllerContext) en System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) en System.Web.Mvc.Controloker. c__DisplayClass1c.b__19 () en System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtro IResultFilter, ResultExecutingContext preContext, continuación de Func`1) en System.Web.Mvc.ControllerActionInvoker. <> c__DisplayClass1c> c__DisplayClass1e.b__1b () en System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controllerContext, filtros IList`1, ActionResult actionResult) en System.Web.Mvc.ControllerActionInvoker.InvokeAction controller. Mvc.Controller.ExecuteCore () en [project_namespace] .Controllers.GlobalizationController.ExecuteCore () en [file_path] en System.Web.Mvc.ControllerBase.Execute (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. <>se c__DisplayClas 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.Mandlervc.MvcHesult System.Web.IHttpAsyncHandler.EndProcessRequest (resultado IAsyncResult) en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () en System.Web.HttpAppecutionStep.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. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completadoSincrónicamente)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. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completadoSincrónicamente)b__0 (Acción f) en System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Acción acción) en System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) en System.Web.Mvc.MvcHandler.System.Web.IHandlerque.As ( IAsyncResult result) en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completadoSincrónicamente)b__0 (Acción f) en System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Acción acción) en System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) en System.Web.Mvc.MvcHandler.System.Web.IHandlerque.As ( IAsyncResult result) en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completadoSincrónicamente)HttpApplication.IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completadoSincrónicamente)HttpApplication.IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completadoSincrónicamente)
Esto me bloquea por completo y, aunque me gustaría mantener la versión beta, es posible que deba eliminarla por completo para deshacerme de la excepción.
fuente
Respuestas:
Intente agregar lo siguiente en su web.config:
<appSettings> <add key="webpages:Version" value="1.0.0.0"/> </appSettings>
El problema puede deberse a que se han registrado varios proveedores de compilación y el último ganador.
fuente
Tuve el mismo problema, pero al migrar ASP.NET MVC 3 a ASP.NET MVC 4. De esta manera llegué a este tema. He encontrado una solución al problema, pero su origen es diferente, no es de la
WebPages
versión.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>
Además, en las notas no se menciona cambiar la Referencia de System.Web.Helpers de 1.0.0.0 a 2.0.0.0 (eliminar y agregar la nueva).
fuente
oldVersion="1.0.0.0-2.0.0.0"
solo para seguir la convención utilizada en la plantilla de proyecto MVC4. Curiosamente,dependentAssembly
forSystem.Web.WebPages.Razor
también está ausente del Web.config raíz en la plantilla del proyecto MVC4.oldVersion="2.0.0.0" newVersion="3.0.0.0"
Una solución más, bastante tardía ... Me encontré con el mismo problema. Hice todas las correcciones enumeradas aquí (¡¡¡Gracias a todos !!!), pero no pudo superar el error. Finalmente, desesperado, encontré un archivo web.config en el directorio Vistas. En este archivo, encontré varias referencias a la versión de System.Web.Mvc y las subí todas a "4.0.0.0". Más importante aún, encontré las siguientes líneas y actualicé los números de versión de "system.web.webPages.Razor" de "1.0.0.0" a "2.0.0.0" y, de repente, todo volvió a funcionar. 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.
fuente
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 (En realidad, puede usar Microsoft Translate en IE10 para ver la versión en inglés y es una traducción bastante buena ...)
El truco consiste en encontrar todas las versiones que se relacionan con MVC3 (como Razor, Mvc, ensamblajes auxiliares, sabrá cuáles son si va a sus referencias y revisa todas las versiones más nuevas de su ensamblaje referenciado) y cámbielas de 1.0.0.0 a 2.0.0.0 y de 3.0.0.0 a 4.0.0.0 (ya 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 están en todas las Web.Configs. Entonces, no solo debajo de su raíz, sino también en Ver, Área / {Área} / Vista, etc.
Siento que esta solución puede permitirle actualizar a MVC4 por completo en lugar de tener un híbrido, que de todos modos no funcionó para mí.
fuente
Te darás cuenta:
System.Web.WebPages.Razor
cambia deVersion=1.0.0.0
aVersion=2.0.0.0
System.Web.Mvc
cambia deVersion=3.0.0.0
aVersion=4.0.0.0
fuente
Si está experimentando este problema y ha probado las soluciones anteriores y esto no funciona, consulte el archivo web.config en su carpeta Vistas. Puede haber algunas configuraciones que entren en conflicto con el archivo Web.config en la carpeta raíz de su aplicación
fuente
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 decirle qué bit específico está causando el problema.
Habiendo dicho eso, nunca instalaría una versión beta en una máquina de desarrollo de producción. Es demasiado 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 desde el metal y no recibir el golpe de rendimiento, si lo necesita (con las betas de herramientas de desarrollo, a menudo lo hace).
fuente
En aras de la exhaustividad...
También puede desactivar las páginas web por completo si no las está utilizando.
<appSettings> <add key="webpages:Enabled" value="false" /> </appSettings>
(Todavía no tengo del todo claro la relación entre las vistas de afeitar y las páginas web, pero parece que mi aplicación MVC con vistas de afeitar todavía funciona con las páginas web desactivadas).
fuente
Además, como último paso, borre la carpeta bin del proyecto de donde proviene el error.
fuente