Share via


Las aplicaciones específicas del entorno de ejecución ya no son autónomas

De forma predeterminada, las aplicaciones específicas del entorno de ejecución o las aplicaciones .NET con un valor de RuntimeIdentifier, ya no son autónomas. En su lugar, dependen del marco de forma predeterminada.

Este es un cambio importante en las situaciones siguientes:

  • Si ha implementado, distribuido o publicado la aplicación y no ha agregado explícitamente la propiedad SelfContained, pero tampoco era necesario que el entorno de ejecución de .NET estuviera instalado en la máquina para que funcionase. En este caso, es posible que haya dependido del comportamiento anterior para generar una aplicación autónoma de forma predeterminada.

  • Si depende de la herramienta IL Link. En este caso, tendrá que realizar los pasos descritos en Acción recomendada para volver a usar IL Link.

Comportamiento anterior

Anteriormente, si se especificaba un identificador en tiempo de ejecución (RID) (a través de RuntimeIdentifier), la aplicación se publicaba como autónoma, incluso si SelfContained no se especificaba explícitamente.

Además:

  • Si PublishSelfContained no se establecía explícitamente en false, las propiedades de publicación PublishSingleFile y PublishAot implicaban un valor RuntimeIdentifier y, por lo tanto, tenían el valor SelfContained (si no se especificaba) durante las operaciones, como dotnet build, dotnet restore y dotnet publish.
  • La propiedad PublishTrimmed no implicaba SelfContained.
  • La propiedad PublishReadyToRun implicaba SelfContained si no se especificaba SelfContained.

Comportamiento nuevo

A partir de .NET 8, para las aplicaciones dirigidas a .NET 8 o una versión posterior, RuntimeIdentifier ya no implica SelfContained de forma predeterminada. En su lugar, las aplicaciones que especifican un identificador en tiempo de ejecución dependerán del entorno de ejecución de .NET de forma predeterminada (dependientes del marco). Las aplicaciones dirigidas a .NET 7 o versiones anteriores no se ven afectadas.

Además:

  • Si PublishSelfContained no se establece explícitamente en false, las propiedades de publicación PublishSingleFile y PublishAot ahora implican SelfContained (si no se especifica) solo durante dotnet publish (es decir, no para dotnet build o dotnet restore).
  • La propiedad PublishTrimmed también implica ahora SelfContained durante dotnet publish.
  • La propiedad PublishReadyToRun ya no implica SelfContained si el proyecto va dirigido a .NET 8 o posterior.

Nota:

Si publica con msbuild /t:Publish y quiere que la aplicación sea independiente, debe especificar explícitamente SelfContained, incluso si el proyecto tiene una de las propiedades de publicación enumeradas.

Versión introducida

.NET 8 (versión preliminar 5)

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad de origen y la compatibilidad binaria.

Motivo del cambio

  • El nuevo comportamiento del SDK de .NET se alinea con el comportamiento de Visual Studio.
  • Las aplicaciones dependientes del marco son más pequeñas de forma predeterminada, ya que no hay copias de .NET almacenadas en cada aplicación.
  • Cuando .NET se administra fuera de la aplicación (es decir, para implementaciones dependientes del marco), .NET permanece más seguro y actualizado. Las aplicaciones que tienen su propia copia del entorno de ejecución no reciben actualizaciones de seguridad. Este cambio hace que más aplicaciones dependan del marco de trabajo de forma predeterminada.
  • Idealmente, las opciones de línea de comandos son ortogonales. En este caso, las herramientas admiten la implementación autónoma (SCD) específica del RID y la implementación dependiente del marco (FDD) específica del RID. Por lo tanto, no tenía sentido que ningún RID pasara de forma predeterminada a FDD y que ningún RID pasara de forma predeterminada a SCD. Este comportamiento a menudo resultaba confuso para los usuarios.

.NET 6 alertó a los usuarios de este cambio importante con la siguiente advertencia:

advertencia NETSDK1179: Se requiere una de las opciones "--self-contained" o "--no-self-contained" cuando se usa "--runtime".

Ahora que los clientes han tenido tiempo de agregar SelfContained explícitamente, está bien introducir el cambio.

  • Si usa .NET 7 o una versión anterior y depende del comportamiento anterior donde se infiere SelfContained, verá esta advertencia:

    En el caso de los proyectos con TargetFrameworks >= 8.0, RuntimeIdentifier ya no proporciona automáticamente una aplicación SelfContained. Para seguir creando una aplicación independiente de .NET Framework después de actualizar a la versión 8.0, considere la posibilidad de establecer SelfContained explícitamente.

    Siga las instrucciones de la advertencia y establezca SelfContained en true en el archivo de proyecto (<SelfContained>true</SelfContained>) o como argumento de línea de comandos, por ejemplo, dotnet publish --self-contained.

  • Si usa .NET 8 y quiere mantener el comportamiento anterior, establezca SelfContained en true.

Vea también