Les applications spécifiques au runtime ne sont plus autonomes
Les applications spécifiques au runtime, ou les applications .NET avec un RuntimeIdentifier
, ne sont plus autonomes par défaut. Au lieu de cela, elles sont dépendante du framework par défaut.
Il s’agit d’un changement cassant dans les situations suivantes :
- Si vous avez déployé, distribué ou publié votre application et que vous n’avez pas explicitement ajouté la propriété
SelfContained
, mais que vous n’avez pas non plus exigé que le runtime .NET soit installé sur l’ordinateur pour qu’il fonctionne. Dans ce cas, vous vous êtes peut-être appuyé sur le comportement précédent pour produire une application autonome par défaut. - Si vous vous appuyez sur l’outil IL Link. Dans ce cas, suivez les étapes décrites sous Action recommandée pour utiliser à nouveau IL Link.
Comportement précédent
Auparavant, si un identificateur d’exécution (RID) était spécifié (via RuntimeIdentifier), l’application était publiée en tant qu’application autonome, même si SelfContained
n’était pas explicitement spécifié.
De plus :
- Si
PublishSelfContained
n’a pas été explicitement défini surfalse
, les propriétés de publicationPublishSingleFile
etPublishAot
impliquent unRuntimeIdentifier
, et par conséquentSelfContained
(s’il n’a pas été spécifié) pendant les opérations incluantdotnet build
,dotnet restore
etdotnet publish
. - La propriété
PublishTrimmed
n’implique pasSelfContained
. - La propriété
PublishReadyToRun
impliquaitSelfContained
siSelfContained
n’était pas spécifié.
Nouveau comportement
À compter de .NET 8, pour les applications qui ciblent .NET 8 ou une version ultérieure, RuntimeIdentifier
n’implique plus SelfContained
par défaut. Au lieu de cela, les applications qui spécifient un identificateur d’exécution dépendent du runtime .NET par défaut (dépendantes du framework). Les applications qui ciblent .NET 7 ou des versions antérieures ne sont pas affectées.
De plus :
- Si
PublishSelfContained
n’est pas explicitement défini surfalse
, les propriétés de publicationPublishSingleFile
etPublishAot
impliquent désormaisSelfContained
(s’il n’est pas spécifié) uniquement pendantdotnet publish
(autrement dit, pas pourdotnet build
oudotnet restore
). - Désormais, la propriété
PublishTrimmed
implique égalementSelfContained
pendantdotnet publish
. - La propriété
PublishReadyToRun
n’implique plusSelfContained
si le projet cible .NET 8 ou une version ultérieure.
Remarque
Si vous publiez à l’aide de msbuild /t:Publish
et si vous souhaitez que votre application soit autonome, vous devez spécifier SelfContained
explicitement, même si votre projet a l’une des propriétés de publication listées.
Version introduite
.NET 8 Preview 5
Type de changement cassant
Cette modification peut affecter la compatibilité des sources et la compatibilité binaire.
Raison du changement
- Le nouveau comportement du SDK .NET correspond au comportement de Visual Studio.
- Les applications dépendantes du framework sont plus petites par défaut, car aucune copie de .NET n’est stockée dans chaque application.
- Lorsque .NET est géré en dehors de l’application (autrement dit, pour les déploiements dépendants du framework), .NET reste plus sécurisé et à jour. Les applications qui ont leur propre copie du runtime n’obtiennent pas de mises à jour de sécurité. Ce changement rend plus d’applications dépendantes du framework par défaut.
- Dans l’idéal, les options de ligne de commande sont orthogonales. Dans ce cas, les outils prennent en charge à la fois le déploiement autonome (SCD) spécifique au RID et le déploiement dépendant du framework (FDD) spécifique au RID. Il n’était donc pas logique qu’aucun identificateur d’exécution (RID) n’ait été défini par défaut sur le FDD et que le RID ait par défaut le SCD. Ce comportement était souvent déroutant pour les utilisateurs.
.NET 6 envoyait une alerte aux utilisateurs concernant ce changement cassant avec l’avertissement suivant :
avertissement NETSDK1179 : une option '--self-contained' ou '--no-self-contained' est nécessaire quand '--runtime' est utilisé.
Maintenant que les clients ont eu le temps d’ajouter explicitement SelfContained
, il est possible d’introduire ce changement.
Action recommandée
Si vous utilisez .NET 7 ou une version antérieure et que vous vous êtes appuyé sur le comportement précédent où
SelfContained
était déduit, cet avertissement s’affiche :Pour les projets avec TargetFrameworks >= 8.0, RuntimeIdentifier ne donne plus automatiquement une application SelfContained (autonome). Pour continuer à créer une application indépendante du framework .NET après la mise à niveau vers la version 8.0, envisagez de définir explicitement SelfContained.
Suivez les instructions de l’avertissement et déclarez votre application comme autonome. Vous pouvez le faire dans le fichier projet ou en tant qu’argument de ligne de commande, par exemple,
dotnet publish --self-contained
.Si vous utilisez .NET 8 et que vous souhaitez conserver le comportement précédent, définissez
SelfContained
surtrue
, de la même façon que décrit précédemment.
Définir les propriétés du fichier projet
SelfContained
est une propriété MSBuild que vous pouvez insérer dans votre fichier projet, qui est un fichier qui contient un .csproj, un .vbproj ou une extension .fsproj. Définir la propriété comme suit :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>