Solución:
Es necesario declarar con qué versiones del marco de trabajo es realmente compatible su aplicación. Supongamos que tenemos una aplicación que apunta a .NET Framework 4.7.2 e intentamos ejecutarla en la máquina que solo tiene .NET Framework 4.5 instalado. Si agregamos esta app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/></startup></configuration>
Windows mostrará un bonito mensaje de error que solicita instalar la versión de marco necesaria:
Si omitimos el archivo app.config, Windows intentará ejecutarlo y luego la aplicación se bloqueará la primera vez que acceda a una función específica de .NET Framework 4.7.2 y no esté presente en la versión del marco instalada.
Tenga en cuenta que la documentación es engañosa al decir que “Este elemento debe ser utilizado por todas las aplicaciones creadas con la versión 1.1 o posterior de .NET Framework.“. Podría interpretarse como”Este elemento es necesario para que la aplicación se ejecute en .NET 1.1+“, mientras que en realidad solo significa que .NET 1.1 cambió una sintaxis de la que se usaba anteriormente en .NET 1.0 requiredRuntime
sintaxis. Más a menudo que no supportedRuntime
NO es necesario para que la aplicación se ejecute, es solo por belleza.
Un escenario común cuando supportedRuntime
es De Verdad necesario para que la aplicación se ejecute es cuando tenemos una aplicación dirigida a .NET 2.x-3.xy intentamos ejecutarla en una máquina que solo tiene 4.x (por ejemplo, Windows 10 tiene 4.6+ pero no tiene .NET 2. x-3.x instalado de forma predeterminada). En este caso, sin supportedRuntime
en app.config, la aplicación no se ejecutará en absoluto, aunque 4.x es principalmente compatible con versiones anteriores. Añadiendo <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
solucionará el problema.
Entonces, para resumir, no duplica la información en los metadatos del ensamblaje, sino que brinda a Windows información adicional sobre cómo conectar la aplicación con la versión del marco con la que es compatible, y qué versión pedirle al usuario que instale si no está presente en la máquina de destino. .