c# asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-5

c# - Error extraño al actualizar ASP.NET MVC de 4 a 5



asp.net-mvc asp.net-mvc-4 (2)

Estoy convirtiendo mi proyecto de MVC 4 a MVC 5 (y .Net 4 a .Net 4.5.2, que es el verdadero impulsor de los cambios).

Cuando ejecuto una de mis páginas, aparece este error (espacio en blanco agregado por mí para facilitar la lectura)

[A] System.Web.WebPages.Razor.Configuration.HostSection no se puede transmitir 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 = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'' en el contexto ''Default'' en la ubicación ''C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Archivos temporales ASP.NET / studentportal3g / 2204bad2 / aece9b3b / assembly / dl3 / ad80387c / 91adbf51_fc73d101 / System.Web.WebPages.Razor.dll ''.

Sin embargo, cuando vi esto por primera vez, ¡Ah, fácil! No tanto :)

Revisé cada proyecto y me aseguré de que su versión se actualice a MVC 5, que tiene la versión 3.0.0.0 de System.Web.WebPages.Razor.dll.

Reconstrucción limpia, aún obtengo el error. No hay problema, eliminaré los archivos temporales en caché.

Reconstrucción limpia, sigo teniendo el problema. Vuelvo, compruebo manualmente cada versión de System.Web.WebPages.Razor.dll, en las referencias de cada proyecto que tiene una referencia. Reviso mi carpeta donde copio dlls para hacer referencias a ellos manualmente, no está allí.

Si mi solución no contiene una copia de la DLL o una referencia a la DLL, y he eliminado manualmente las carpetas de caché en ''C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Temporary ASP.NET

Archivos / studentportal3g ...

¿De dónde viene el viejo dll malo? ¿Cómo soluciono este error? ¿Cómo evito que vuelva a suceder?

Gracias,

Eric-


Parece que la antigua DLL está en la Caché de ensamblados global (GAC). El GAC es un lugar donde puede almacenar ensamblajes a los que se puede hacer referencia desde varias aplicaciones en la máquina. Haga clic aquí para leer más sobre GAC.

Use la herramienta gacutil para actualizar el ensamblaje en el GAC.

La herramienta se encuentra en algún lugar debajo de la carpeta "Microsoft SDKs" en Archivos de programa. Para mí, estaba ubicado en

C: / Archivos de programa (x86) / Microsoft SDKs / Windows / v10.0A / bin / NETFX 4.6.1 Herramientas /

Abra cmd y navegue hasta el lugar donde guardé gacutil. Entonces úsalo así:

gacutil.exe -i [path to your assebly] -f .

El parámetro -i es para indicar dónde se encuentra su ensamblaje. El parámetro -f se usa para forzar una actualización del ensamblaje, si ya estaba allí.

Ejemplo

Digamos que su DLL se encuentra en

C: / temp / System.Web.WebPages.Razor.dll

Entonces ejecutarías gacutil.exe -i "C:/temp/System.Web.WebPages.Razor.dll" -f


Visual Studio es una gran herramienta, pero no siempre toma las decisiones correctas cuando se trata de actualizar dependencias, ni admite todas las opciones posibles disponibles en MSBuild. Cada vez que se encuentre en un vínculo como este, debe revisar manualmente y (si es necesario) editar su archivo .csproj para resolverlo.

El problema no es que su archivo exista en el GAC o que NuGet no lo haya instalado, lo más probable es que uno de los archivos de su proyecto todavía tenga una referencia a la versión anterior de System.Web.WebPages.Razor 1.0.0.0 , y necesita encontrar todas las referencias y cambiarlas a 3.0.0.0 consecuencia.

  1. Haga clic derecho en el nodo de su proyecto en el Explorador de soluciones y haga clic en Unload Project .
  2. Haga clic derecho en el nodo del proyecto nuevamente y haga clic en Edit <projectName>.csproj .
  3. Busque en el archivo referencias a System.Web.WebPages.Razor y actualice la versión y el HintPath consecuencia (como se muestra a continuación). Asegúrese de que el HintPath que usa en realidad apunte a un archivo existente.
  4. Repita estos pasos para todos los proyectos dependientes en la solución (y cualquiera que esté en archivos DLL que no sean parte de la solución).

Antigua referencia

<Reference Include="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Private>True</Private> <HintPath>../packages/Microsoft.AspNet.WebPages.1.0.20105.408/lib/net40/System.Web.WebPages.Razor.dll</HintPath> </Reference>

Referencia actualizada

<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Private>True</Private> <HintPath>../packages/Microsoft.AspNet.WebPages.3.0.0/lib/net45/System.Web.WebPages.Razor.dll</HintPath> </Reference>

También debe revisar los archivos web.config y /Views/web.config para asegurarse de que no /Views/web.config referencia a ninguna versión anterior de este ensamblado.

NOTA: Si las instrucciones anteriores no resuelven su problema, es probable que el problema esté fuera de su solución. Lo más probable es que haya una biblioteca de terceros que haga referencia a la versión anterior del archivo en alguna parte. Si es así, podría intentar obtener una versión actualizada de la DLL.

También puede consultar esta pregunta .