Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las aplicaciones específicas del entorno de ejecución o las aplicaciones de .NET con RuntimeIdentifier
ya no son autocontenidas de forma predeterminada. En su lugar, dependen del marco de forma predeterminada.
Este es un cambio importante en las siguientes situaciones:
- Si implementó, distribuyó o publicó la aplicación y no agredía explícitamente la
SelfContained
propiedad, pero tampoco requería que el entorno de ejecución de .NET se instalara en la máquina para que funcione. En este caso, es posible que haya confiado en el comportamiento anterior para generar una aplicación independiente de forma predeterminada. - Si depende de la herramienta IL Link. En este caso, siga los pasos descritos en Acción recomendada para volver a usar IL Link.
Comportamiento anterior
Anteriormente, si se especificó un identificador en tiempo de ejecución (RID) (a través de RuntimeIdentifier), la aplicación se publicó como independiente, incluso si SelfContained
no se especificó explícitamente.
Además:
- Si
PublishSelfContained
no se estableció explícitamente enfalse
, las propiedades de publicaciónPublishSingleFile
yPublishAot
implicaban unRuntimeIdentifier
y, por tanto, unSelfContained
(si no se especificaba) durante las operaciones, incluidasdotnet build
,dotnet restore
, ydotnet publish
. - La
PublishTrimmed
propiedad no implicabaSelfContained
. - La propiedad
PublishReadyToRun
implicabaSelfContained
si no se especificabaSelfContained
.
Nuevo comportamiento
A partir de .NET 8, para las aplicaciones que tienen como destino .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 forma predeterminada (dependiente del marco). Las aplicaciones destinadas 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 lo especifica) solo durantedotnet publish
(es decir, no paradotnet build
odotnet restore
). - La
PublishTrimmed
propiedad también ahora implicaSelfContained
durantedotnet publish
. - La
PublishReadyToRun
propiedad ya no implicaSelfContained
si el proyecto tiene como destino .NET 8 o posterior.
Nota:
Si publicas con msbuild /t:Publish
y quieres que la aplicación sea independiente, debes especificar SelfContained
explícitamente , 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 disruptivo
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 obtienen 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 tanto la implementación independiente específica del RID (SCD) como la implementación dependiente del marco específica del RID (FDD). 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 a 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, es adecuado establecer la pausa.
Acción recomendada
Si usa .NET 7 o una versión anterior y dependía del comportamiento previo, en el que se infería
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 de línea de comandos, por ejemplo,
dotnet publish --self-contained
.Si usa .NET 8 y desea mantener el comportamiento anterior, establezca
SelfContained
atrue
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>