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?

usuario2632851
fuente
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>
Ian Flynn
fuente
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
Esto funciona stackoverflow.com/questions/17454852/…
Rodolpho Brock
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.

usuario3141889
fuente
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)

Brad Christie
fuente
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
15

La solución de Ian funcionó en un proyecto, pero para otros necesito la información más completa en Cómo actualizar a MVC 5 y Web API 2

Ken Mc
fuente
Este artículo lo hizo por mí. ¡Gracias!
gligoran
Creo que este artículo contiene la descripción de actualización más correcta y completa, gracias.
Mikhail Brinchuk
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.

ProgramaciónNinja
fuente
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.

basado en código
fuente
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 :)

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

user4287068
fuente
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>
Fernando González Sánchez
fuente