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.
-
Haga clic derecho en el nodo de su proyecto en el Explorador de soluciones y haga clic en
Unload Project
. -
Haga clic derecho en el nodo del proyecto nuevamente y haga clic en
Edit <projectName>.csproj
. -
Busque en el archivo referencias a
System.Web.WebPages.Razor
y actualice la versión y elHintPath
consecuencia (como se muestra a continuación). Asegúrese de que elHintPath
que usa en realidad apunte a un archivo existente. - 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 .