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 enfalse
, las propiedades de publicaciónPublishSingleFile
yPublishAot
implicaban un valorRuntimeIdentifier
y, por lo tanto, tenían el valorSelfContained
(si no se especificaba) durante las operaciones, comodotnet build
,dotnet restore
ydotnet publish
. - La propiedad
PublishTrimmed
no implicabaSelfContained
. - La propiedad
PublishReadyToRun
implicabaSelfContained
si no se especificabaSelfContained
.
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 enfalse
, las propiedades de publicaciónPublishSingleFile
yPublishAot
ahora implicanSelfContained
(si no se especifica) solo durantedotnet publish
(es decir, no paradotnet build
odotnet restore
). - La propiedad
PublishTrimmed
también implica ahoraSelfContained
durantedotnet publish
. - La propiedad
PublishReadyToRun
ya no implicaSelfContained
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.
Acción recomendada
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
entrue
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>