¿Es posible ejecutar una aplicación .NET 4.5 en XP?

Primero, he leído lo siguiente:

  • Conectar el estuche
  • VS caso
  • y especialmente esta publicación channel9

Entonces, desde el último punto, realmente creo que no hay forma de evitar esto, pero tenía que ver si podía obtener una respuesta definitiva, ya que a mi equipo le gustaría actualizar de .NET 4.0 a .NET 4.5. Sin embargo, tenemos que apoyar XP.

¿No hay posibilidad de ir a .NET 4.5 si queremos dar soporte a XP?

Lo único que se me ocurre es crear dos soluciones separadas, pero luego las bases de código tendrían que divergir si usamos las características de .NET 4.5.

Por lo tanto, estoy buscando una solución increíble que no pude encontrar y otros tal vez ya saben.

Dudo en publicar esta respuesta, en realidad es técnicamente posible, pero no funciona tan bien en la práctica. Los números de versión de los ensamblados CLR y del marco principal no se modificaron en 4.5. Aún tiene como objective v4.0.30319 del CLR y los números de versión del ensamblaje del armazón siguen siendo 4.0.0.0. Lo único distintivo del manifiesto de ensamblaje cuando lo mira con un desensamblador como ildasm.exe es la presencia de un atributo [TargetFramework] que dice que se necesita 4.5, que debería modificarse. No es tan fácil, es emitido por el comstackdor.

La mayor diferencia no es tan visible, Microsoft hizo un cambio largamente esperado en el encabezado ejecutable de los ensamblajes. Que especifica con qué versión de Windows es compatible el ejecutable. XP pertenece a una generación anterior de Windows, comenzó con Windows 2000. Su número de versión principal es 5. Vista fue el comienzo de la generación actual, la versión principal número 6.

Los comstackdores .NET siempre han especificado el número mínimo de versión para ser 4.00, la versión de Windows NT y Windows 9x. Puede ver esto ejecutando dumpbin.exe / headers en el ensamblado. La salida de muestra se ve así:

OPTIONAL HEADER VALUES 10B magic # (PE32) ... 4.00 operating system version 0.00 image version 4.00 subsystem version // <=== here!! 0 Win32 version ... 

Lo nuevo en .NET 4.5 es que los comstackdores cambian esa versión del subsistema a 6.00. Un cambio que fue excesivo debido en gran parte a que Windows presta atención a ese número, más allá de solo verificar si es lo suficientemente pequeño. También activa las características de la aplicación, ya que supone que el progtwig se escribió para funcionar en versiones anteriores de Windows. Estas características causan problemas, particularmente la forma en que Windows miente sobre el tamaño de una ventana en Aero es problemático. Deja de mentir sobre los bordes gruesos de una ventana de Aero cuando puede ver que el progtwig fue diseñado para ejecutarse en una versión de Windows que tiene Aero.

Puede modificar ese número de versión y volver a establecerlo en 4.00 ejecutando Editbin.exe en sus ensamblajes con la opción / subsistema. Esta respuesta muestra un evento de postconsumo de muestra.

Sin embargo, es sobre dónde terminan las buenas noticias, un problema importante es que .NET 4.5 no es muy compatible con .NET 4.0. Con mucho, el mayor obstáculo es que las clases se trasladaron de un ensamblaje a otro. Lo más notable, eso sucedió para el atributo [Extensión]. Anteriormente en System.Core.dll, se movió a Mscorlib.dll en .NET 4.5. Es un kaboom en XP si declaras tus propios métodos de extensión, tu progtwig dice buscar en Mscorlib el atributo, habilitado por un atributo [TypeForwardedTo] en la versión .NET 4.5 del ensamblado de referencia System.Core. Pero no está allí cuando ejecuta su progtwig en .NET 4.0

Y, por supuesto, no hay nada que lo ayude a dejar de usar clases y métodos que solo están disponibles en .NET 4.5. Cuando lo haga, su progtwig fallará con una TypeLoadException o MissingMethodException cuando se ejecute en 4.0

Solo apunte a 4.0 y todos estos problemas desaparecerán. O rompa ese atasco y deje de dar soporte a XP, una decisión comercial que los progtwigdores a menudo no pueden tomar pero que ciertamente puede alentar al señalar las molestias que está causando. Por supuesto, existe un costo no cero para tener que soportar sistemas operativos antiguos, solo el esfuerzo de prueba es sustancial. Un costo que la administración no suele reconocer, la compatibilidad de Windows es legendaria, a menos que se les indique. Adelante ese costo para el cliente y tienden a tomar la decisión correcta mucho más rápido 🙂 Pero no podemos ayudarlo con eso.

Tristemente, no, no puedes ejecutar 4.5 progtwigs en XP.

Y la publicación relevante de esa página de Connect:

Publicado por Microsoft el 23/03/2012 a las 10:39
Gracias por el informe. Este comportamiento es por diseño en .NET Framework 4.5 Beta. Los sistemas operativos mínimos admitidos son Windows 7, Windows Server 2008 SP2 y Windows Server 2008 R2 SP1. Windows XP no es un sistema operativo compatible para la versión Beta.

Prueba mono:

http://www.go-mono.com/mono-downloads/download.html

Esta descarga funciona en todas las versiones de Windows XP, 2003, Vista y Windows 7.

El proyecto Mono dejó de admitir Windows XP y “se olvidó” de mencionarlo. Aunque aún afirman que Windows XP SP2 es la versión mínima admitida, en realidad es Windows Vista.

La última versión de Mono para admitir Windows XP fue 3.2.3.

La última versión para admitir Windows XP (SP3) es mono-4.3.2.467-gtksharp-2.12.30.1-win32-0.msi y eso no reemplaza a .NET 4.5, pero podría ser de interés para algunas aplicaciones.

ver allí: https://download.mono-project.com/archive/4.3.2/windows-installer/