Partage via


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 sur false, les propriétés de publication PublishSingleFile et PublishAot impliquent un RuntimeIdentifier, et par conséquent SelfContained (s’il n’a pas été spécifié) pendant les opérations incluant dotnet build, dotnet restore et dotnet publish.
  • La propriété PublishTrimmed n’implique pas SelfContained.
  • La propriété PublishReadyToRun impliquait SelfContained si SelfContained 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 sur false, les propriétés de publication PublishSingleFile et PublishAot impliquent désormais SelfContained (s’il n’est pas spécifié) uniquement pendant dotnet publish (autrement dit, pas pour dotnet build ou dotnet restore).
  • Désormais, la propriété PublishTrimmed implique également SelfContained pendant dotnet publish.
  • La propriété PublishReadyToRun n’implique plus SelfContained 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.

  • 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 sur true, 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>

Voir aussi