Permitir que la aplicación C#creada con.NET 2.0 se ejecute en.NET 4.0/4.5
.net-4.0 .net-2.0 (5)
Tenemos un archivo DLL de C # (llamémoslo myapp.exe
) creado con .NET 2.0 Framework (VS2005) y descubrimos que nuestra aplicación no funcionará en máquinas donde solo esté instalado .NET 4.0 o superior. Para que nuestra aplicación funcione en .NET 4.0, agregué las siguientes líneas a myapp.exe.config
siguiendo este artículo Instalando .NET Framework V4.0 y Ejecutando aplicaciones .NET 2.0 / 3.0 / 3.5 / 3.5Sp1
<startup>
<supportedRuntime version="v4.0.30319"/>
</startup>
Y está funcionando.
Entonces vi que este artículo también mencionaba lo siguiente (especialmente el segundo párrafo):
Ahora, sabía que no puede tomar una aplicación 3.5 Service Pack 1 y ejecutarla en el CLR V4.0. Necesita un CLR V2.0 o una reconfiguración con una etiqueta para doblar la aplicación para que se ejecute en el CLR V4.0 y esa flexión puede ser algo que no desea hacer.
Sin embargo, no me había dado cuenta de que instalar .NET 4.0 no instalaría los bits que necesita para una aplicación 2.0 / 3.0 / 3.5 / 3.5Sp1. Solo instalaría los ensamblados V4.0 CLR y V4.0 y no instalaría adicionalmente el equivalente de .NET Framework V3.5 Sp1. Entonces, necesitaría instalar (por ejemplo) .NET Framework V3.5 Sp1 usted mismo junto con .NET 4.0
De mis pruebas significaría que podría ejecutar mi aplicación 2.0 C # en .NET 4.0 con .NET 4.0 framework (ensamblaje / bibliotecas 4.0), lo que contradice lo que dicen los artículos.
¿O me estoy perdiendo algo aquí? Podría ser útil si alguien pudiera aclarar esto. Microsoft realmente no deja esto claro en absoluto.
De mis pruebas significaría que podría ejecutar mi aplicación 2.0 C # en .NET 4.0 con .NET 4.0 framework (ensamblaje / bibliotecas 4.0), lo que contradice lo que dicen los artículos.
Puede ejecutar su aplicación en .NET 4 utilizando los ensamblados .NET 4. Sin embargo, siempre existe la posibilidad de que pueda haber un ligero cambio en el comportamiento del tiempo de ejecución, ya que no utilizará el mismo tiempo de ejecución y el mismo marco que utilizó para el desarrollo. Sospecho que el artículo está intentando sugerir que no obtendrá exactamente el mismo comportamiento con solo instalar 4.0, aunque, como ha visto, debería funcionar.
Es probable que esto esté bien, aunque recomendaría realizar pruebas exhaustivas de su aplicación si esta va a ser una opción de implementación estándar.
El solo hecho de configurar web.config en supportedRuntime version = "v4.0.30319" / no será suficiente.
Debe abrir su proyecto en Visual Studio, cambiar su marco de destino (propiedades -> compilar) a 4.0 - y ENTONCES volver a implementar la solución construida para sus clientes 4.0. Varios conjuntos de sistemas son diferentes entre 2.0 y 4.0 (system.web, etc.), aunque, como se sugirió en la respuesta anterior, se ha proporcionado compatibilidad hacia atrás.
La única forma de proporcionar a sus clientes de forma consistente una versión "compatible con 4.0" es compilarla en un tiempo de ejecución de 4.0. Esto implicará la actualización de cualquier tercera parte, bibliotecas de código abierto a sus versiones 4.0 también.
Solo para ser un poco más conciso. En el App.config está mostrando soporte para el CLR. Desde .Net v2 y en adelante solo hay 2 versiones del CLR . Así que lo siguiente le dará soporte para .Net v2 y así sucesivamente. Asegúrese de incluir su archivo exe.config que se construye con su proyecto, de lo contrario es probable que aún vea la ventana emergente que solicita la instalación de .Net.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0.50727"/>
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Para soporte de .Net v2 a v3.5 use:
<supportedRuntime version="v2.0.50727"/>
Para soporte de .Net v4.0 a 4.6 use:
<supportedRuntime version="v4.0"/>
Se puede encontrar más información sobre Configurar una aplicación para admitir .NET Framework
Y cito:
".NET Framework 4 es compatible con versiones anteriores de las aplicaciones creadas con las versiones 1.1, 2.0, 3.0 y 3.5 de .NET Framework. En otras palabras, las aplicaciones y componentes creados con versiones anteriores de .NET Framework funcionarán en la .NET Framework 4."
Tomado de la compatibilidad de versiones en .NET Framework
Tienes la idea correcta con el archivo App.config, pero realmente te estás limitando con una línea.
¿Puedo sugerir un uso más liberal de las líneas de Runtime soportadas?
Por ejemplo:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0.50727"/>
<!--
<supportedRuntime version="v3.5"/> "The .NET Framework version 3.0 and 3.5 use version 2.0.50727 of the CLR."
-->
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1,Profile=Client" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2,Profile=Client" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3,Profile=Client" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
¿Por qué se comenta supportedRuntime version="v3.5"
? Recuerde, esta configuración identifica con qué versiones de Common Language Runtime (CLR) es compatible con su aplicación. No hay una versión 3.0 o 3.5 del CLR. Consulte las versiones y dependencias de .NET Framework