El sitio dejó de funcionar en asp.net System.Web.WebPages.Razor.Configuration.HostSection no se puede convertir a


115

Tengo un problema como este en el servidor

[A] System.Web.WebPages.Razor.Configuration.HostSection no se puede convertir en [B] System.Web.WebPages.Razor.Configuration.HostSection. El tipo A 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 '. El tipo B 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 '.

Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.InvalidCastException: [A] System.Web.WebPages.Razor.Configuration.HostSection no se puede convertir en [B] System.Web.WebPages.Razor.Configuration.HostSection. El tipo A 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 '. El tipo B 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 '.

Error de fuente:

He instalado MVC 3 en el seridor y en mi computadora. Intenté reemplazarlo con una base de código de 15 días, pero existe el mismo problema.

ahora quiero solucionarlo. ¿Alguien sabe cómo puedo solucionarlo?


Parece que en su aplicación algunos ensamblados tienen dependencias en diferentes versiones de razor. Intente inspeccionar sus ensamblados con ildasm o .NET Reflector para ver sus dependencias.
Paulo Morgado

Respuestas:


200

En el Web.config raíz, asegúrese de que assemblyBinding contenga la versión correcta para el ensamblado "System.Web.WebPages.Razor" y "System.Web.Mvc". Verifique su existencia real, así como mi etiqueta de ensamblaje "System.Web.WebPages.Razor" faltaba causando el error. Tenía mis versiones de ensamblado configuradas en 3.0 y 5.0 respectivamente en el momento de escribir este artículo con actualizaciones completas de NuGet. El código debería verse como a continuación. El publicKeyToken permanecerá igual entre las versiones. ¡Salud!

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <!--some more bidings-->
  <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>

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
<!--some more bidings-->
</assemblyBinding>

2
Trabajó para mi. Me faltaba información de Razor y MVC señaló la versión incorrecta.
Hoakie

La misma situación que @Hoakie - actualizado Razor a 3.0.0 y MVC a 5.0.0 y no había ninguna referencia de ensamblaje dependiente de Razor, y MVC todavía decía oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Se agregó el XML de ensamblaje dependiente de Razor anterior y se cambió 4.0.0.0 a 5.0.0.0 y el tío de Bob.
Scott Baker

2
Esto funcionó para mí gracias. Tenía "System.Web.WebPages" con los enlaces correctos pero no funcionaba hasta que también agregué la clave Razor. Sin embargo, en otros proyectos no tuve que hacer eso, no estoy seguro de cuál es la diferencia y por qué los enlaces de superclase no funcionarían para Razor. Alguien sabe la respuesta?
Shane

Igual que aquí. Tengo la entrada MVC pero no la de Razor. Ahora funciona. Gracias.
Yves Tkaczyk


40

Mi caso se estaba actualizando de mvc4 a mvc5.

Me aseguré de que mis referencias estuvieran sincronizadas (con una aplicación mvc5 recién creada), actualicé el archivo web.config en consecuencia y todavía no funcionó. Finalmente funcionó cuando cambié mi archivo web.config ( DENTRO DEL directorio VIEWS ) de:

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

A esto:

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

RECUERDE: detenga iis (express o nativo), limpie la solución, compile y ejecute.


Creo que esta respuesta debería ser una respuesta en realidad. El enlace de ensamblado generalmente está bien cuando se usa el enfoque de paquete de actualización para actualizar de mvc4 a mvc5.
Roman

34

En caso de que la respuesta de ian no fuera suficiente (y los ensamblados sean correctos, pero el casting sigue siendo incorrecto), es probable que aún no haya actualizado <configSections>para reflejar el nuevo ensamblaje. asegúrese de que la parte del ensamblaje también haga referencia a la versión 3.0 de la System.Web.WebPages.Razorbiblioteca. p.ej

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</sectionGroup>

(Note que todos hacen referencia version=3.0.0ahora)


8
Solo agregaría que si no puede encontrar estas configuraciones en la raíz Web.Config, verifique Web.Config en la carpeta Vistas también.
gligoran

4
Sí, el problema fue la carpeta Vistas web.config para mí.
Matthew Nichols


1

Este problema es muy común cuando está desarrollando para MVC 4 y luego, de repente, instala un paquete que está disponible en una versión más reciente, por lo que rompe toda la aplicación.

La única solución a este problema es actualizar toda su aplicación a una más nueva o instalar el paquete anterior compatible con su aplicación.


1

Problema:

[A] System.Web.WebPages.Razor.Configuration.HostSection no se puede convertir en [B] System.Web.WebPages.Razor.Configuration.HostSection. El tipo A 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 '. El tipo B se origina en 'System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' en el contexto 'Default' en la ubicación 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Archivos temporales ASP.NET \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Identificación:

El error está en el archivo de configuración, es decir, web.config de su proyecto.

Aquí encontrará que la versión de Razor está configurada en 2.0.0.0 donde, como en su proyecto, la versión 2.0.0.0 no está disponible.

Solución:

Es simple, simplemente cambie la versión de 2.0.0.0 a 3.0.0.0 y hará la magia.

type = "System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version = 3.0.0.0 type =" System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages. , Versión = 3.0.0.0

No es necesario poner redirección o algo así, ya que complicará las cosas.


0

Encontré un problema y una solución.

1 Apunto mi código a 4.0 y luego subo el código y funcionó. Antes también actualizo mi código a asp.net MVC 4.

ahora es trabajo :)


3
¿Podrías ser más específico?
nwayve

0

Abra la ubicación de los dos archivos dll en su sistema, copie uno de los dll en la ubicación de su archivo al otro
e intente ejecutar el proyecto.


0

Otra forma de solucionar este problema, sin tener que actualizar las referencias, es esta

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Pages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.