error - ¿Qué significan las configuraciones de TargetFramework en web.config en ASP.NET MVC?
error compilation debug true targetframework 4.6 1 (2)
Una de nuestras aplicaciones web ASP.NET MVC 5 tiene la siguiente configuración web.config:
<system.web>
<compilation debug="true" targetFramework="4.6" />
<httpRuntime targetFramework="4.5" />
<!--... many other things -->
</system.web>
No está claro por qué hay dos configuraciones de TargetFramework, y parece estar mal compilar la orientación 4.6 y luego intentar ejecutar por debajo de 4.5 ...
Obviamente me falta algo, pero ¿qué?
La razón de la existencia de
targetFramework
en
web.config
es mantener los problemas de compatibilidad entre cambios de última hora para cada versión de .NET Framework.
La diferencia entre
targetFramework
en
compilation
y
httpRuntime
pertenece a cada entorno de desarrollo e implementación.
Según el blogs.msdn.microsoft.com/webdev/2012/11/19/… :
<compilation targetFramework="4.6" />
Selecciona qué versión de los ensamblados de referencia de .NET Framework se utilizan al realizar la compilación. (Nota: Visual Studio requiere que este elemento esté presente en Web.config, aunque lo deduzcamos automáticamente).
Este elemento determina la versión de ensamblaje utilizada durante la compilación para crear dependencias y ensamblados relacionados del proyecto actual.
<httpRuntime targetFramework="4.5" />
significa que el proyecto actual diseñado para usar ensamblados de tiempo de ejecución de .NET 4.5 sin recompilar los ensamblados de proyectos existentes en la máquina de implementación antes de cargarlo en la memoria.
Por lo tanto, podemos concluir que el número de versión definido en
targetFramework
en el elemento
httpRuntime
diseñado para mantener la compatibilidad entre el proyecto compilado y los ensamblajes disponibles en el uso del tiempo de ejecución, dependiendo de la versión de los archivos de tiempo de ejecución que se utilizan en la máquina de destino.
Por lo tanto, en su caso, este no es un comportamiento incorrecto, los creadores del proyecto simplemente quieren mantener la compatibilidad de tiempo de ejecución con la versión de tiempo de ejecución más baja disponible en la máquina de destino con características similares (es decir, la versión 4.5), incluso el proyecto compilado con la versión más reciente de Ensambles .NET. La diferencia entre la versión 4.5 y 4.6 es relativamente pequeña, por lo que mantener la versión de tiempo de ejecución hasta 4.5 todavía es aceptable en este contexto.
Referencias relacionadas:
https://msdn.microsoft.com/en-us/library/dn833123(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/dn833125(v=vs.110).aspx
Según tengo entendido,
<compilation debug="true" targetFramework="4.6" />
está siendo suprimido por
<httpRuntime targetFramework="4.5" />
ya que
httpRuntime
se traduce al siguiente
<compilation targetFramework="4.5" />
<machineKey compatibilityMode="Framework45" />
<pages controlRenderingCompatibilityVersion="4.5" />
Entonces, la configuración anterior probablemente se deba a algún malentendido o un error si VS lo hace directamente, lo que no creo que sea cierto.
Para entender cómo esta configuración y todas las demás cosas relacionadas significa que este blog titulado blogs.msdn.microsoft.com/webdev/2012/11/19/… escrito por un empleado de Microsoft podría ayudarlo. Pero lo esencial es;
.NET Framework (incluido ASP.NET) se esfuerza por mantener una compatibilidad cercana al 100% cuando se actualiza un marco existente en una máquina. Intentamos garantizar tanto como sea posible que si una aplicación se desarrolló e implementó en .NET Framework 4, continuará funcionando en 4.5. Esto normalmente significa mantener comportamientos extravagantes, con errores o indeseables en el producto entre versiones, ya que solucionarlos puede afectar negativamente las aplicaciones que dependían de esos comportamientos.