Compartir a través de


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, siga los pasos descritos en Acción recomendada para usar IL Link de nuevo.

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 dependen del entorno de ejecución de .NET de manera predeterminada (dependiente 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 predeterminado se convirtiera en FDD y que los RID predeterminados se convirtieran en 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 declare la aplicación como independiente. Puede hacerlo en el archivo del proyecto o como argumento en la línea de comandos, por ejemplo, dotnet publish --self-contained.

  • Si usa .NET 8 y desea mantener el comportamiento anterior, establezca SelfContained en true de la misma manera que se ha descrito anteriormente.

Establezca la propiedad de archivo de proyecto

SelfContained es una propiedad de MSBuild que puede insertar en el archivo de proyecto, que es un archivo que tiene una extensión .csproj, .vbproj, o .fsproj. Establezca la propiedad de la siguiente manera:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <SelfContained>true</SelfContained>
  </PropertyGroup>
</Project>

Consulte también