Publier des applications .NET avec l’interface CLI .NET
Cet article montre comment publier votre application .NET à partir de la ligne de commande. .NET fournit trois façons de publier vos applications. Le déploiement dépendant du framework produit un fichier .dll multiplateforme qui utilise le runtime .NET installé localement. L’exécutable dépendant du framework produit un exécutable spécifique à la plateforme qui utilise le runtime .NET installé localement. L’exécutable autonome produit un exécutable spécifique à la plateforme et inclut une copie locale du runtime .NET.
Pour obtenir une vue d’ensemble de ces modes de publication, consultez Déploiement d’applications .NET Core.
Vous recherchez une aide rapide sur l’utilisation de l’interface CLI ? Le tableau suivant présente quelques exemples illustrant comment publier votre application. Vous pouvez spécifier le framework cible avec le paramètre -f <TFM>
ou en modifiant le fichier projet. Pour plus d’informations, consultez Principes de base de la publication.
Mode de publication | Commande |
---|---|
Déploiement dépendant du framework | dotnet publish -c Release -p:UseAppHost=false |
Exécutable dépendant du framework | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
Déploiement autonome | dotnet publish -c Release -r <RID> --self-contained true |
Remarque
- Le paramètre
-c Release
n’est pas obligatoire. Il est fourni en guise de rappel pour publier le build Release de votre application. - Dans le kit de développement logiciel (SDK) .NET version 3.1 ou ultérieure, l’exécutable dépendant de l’infrastructure est le mode de publication par défaut lors de l’exécution de la commande
dotnet publish
de base.
Principes de base de la publication
Le paramètre <TargetFramework>
du fichier projet spécifie le framework cible par défaut quand vous publiez votre application. Vous pouvez choisir comme framework cible n’importe quel TFM (Target Framework Moniker) valide. Par exemple, si votre projet utilise <TargetFramework>net8.0</TargetFramework>
, un binaire qui cible .NET 8 est créé. Le TFM spécifié dans ce paramètre est la cible par défaut utilisée par la commande dotnet publish
.
Si vous souhaitez cibler plusieurs infrastructures, vous pouvez affecter plusieurs valeurs de TFM séparées par un point-virgule au paramètre <TargetFrameworks>
. Lorsque vous générez votre application, une build est générée pour chaque infrastructure cible. Toutefois, lorsque vous publiez votre application, vous devez spécifier l’infrastructure cible avec la commande dotnet publish -f <TFM>
.
Le mode BUILD-CONFIGURATION par défaut est Debug, sauf si vous le modifiez avec le paramètre -c
.
Le répertoire de sortie par défaut de la commande dotnet publish
est ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/
. Par exemple, dotnet publish -c Release -f net8.0
publie dans ./bin/Release/net8.0/publish/
. Toutefois, vous pouvez choisir un chemin de sortie et une structure de dossiers simplifiés pour toutes les sorties de génération. Pour plus d’informations, consultez Disposition de sortie des artefacts.
Dépendances natives
Si votre application a des dépendances natives, elle risque de ne pas fonctionner sur un autre système d’exploitation. Par exemple, si votre application utilise l’API Windows native, elle ne s’exécutera pas sur macOS ou Linux. Vous devrez fournir du code propre à la plateforme et compiler un exécutable pour chaque plateforme.
Sachez également que si une bibliothèque que vous avez référencée a une dépendance native, votre application risque de ne pas fonctionner sur toutes les plateformes. Toutefois, il est possible qu’un package NuGet que vous référencez ait inclus des versions propres à la plateforme afin de gérer pour vous les dépendances natives requises.
Lors de la distribution d’une application avec des dépendances natives, vous devrez peut-être utiliser le commutateur dotnet publish -r <RID>
afin de spécifier la plateforme cible pour laquelle vous souhaitez publier. Pour obtenir une liste des identificateurs de runtime, consultez Catalogue d’identificateurs de runtime (RID).
Vous trouverez davantage d’informations sur les binaires propres à la plateforme dans les sections Exécutable dépendant du framework et Déploiement autonome.
Exemple d'application
Vous pouvez utiliser l’application suivante pour explorer les commandes de publication. L’application est créée en exécutant les commandes suivantes dans votre terminal :
mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle
Le fichier Program.cs
ou Program.vb
généré par le modèle de console doit être modifié comme suit :
using System;
namespace apptest1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
}
}
}
Module Program
Sub Main(args As String())
Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
End Sub
End Module
Quand vous exécutez l'application (dotnet run
), la sortie suivante s'affiche :
_ _ _ _ __ __ _ _ _
| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Déploiement dépendant du framework
Quand vous publiez votre application en tant que déploiement dépendant du framework, un fichier <PROJECT-NAME>.dll
est créé dans le dossier ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/
. Pour exécuter votre application, accédez au dossier de sortie et utilisez la commande dotnet <PROJECT-NAME>.dll
.
Votre application est configurée pour cibler une version spécifique de .NET. Ce runtime .NET ciblé doit se trouver sur n’importe quel ordinateur sur lequel votre application s’exécute. Par exemple, si votre application cible .NET Core 8, le runtime .NET Core 8 doit être installé sur tout ordinateur sur lequel votre application s’exécute. Comme indiqué dans la section Principes de base de la publication, vous pouvez modifier votre fichier projet afin de changer le framework cible par défaut ou de cibler plusieurs frameworks.
La publication d’un FDD crée une application qui est automatiquement transférée vers le dernier correctif de sécurité .NET disponible sur le système qui exécute l’application. Pour plus d’informations sur la liaison de version au moment de la compilation, consultez Sélectionner la version .NET Core à utiliser.
Mode de publication | Commande |
---|---|
Déploiement dépendant du framework | dotnet publish -c Release -p:UseAppHost=false |
Exécutable dépendant du framework
L’exécutable dépendant du framework (FDE) est le mode par défaut pour la commande dotnet publish
de base. Vous n’avez pas besoin de spécifier d’autres paramètres tant que vous souhaitez cibler le système d’exploitation actuel.
Dans ce mode, un hôte d’exécutable propre à la plateforme est créé pour héberger votre application multiplateforme. Ce mode est semblable au déploiement dépendant de l’infrastructure, étant donné que celui-ci nécessite un ordinateur hôte sous la forme de la commande dotnet
. Le nom de fichier de l’exécutable hôte varie en fonction de la plateforme, et ressemble à <PROJECT-FILE>.exe
. Vous pouvez exécuter cet exécutable directement au lieu d’appeler dotnet <PROJECT-FILE>.dll
, qui constitue tout de même une manière acceptable d’exécuter l’application.
Votre application est configurée pour cibler une version spécifique de .NET. Ce runtime .NET ciblé doit se trouver sur n’importe quel ordinateur sur lequel votre application s’exécute. Par exemple, si votre application cible .NET 8, le runtime .NET 8 doit être installé sur tout ordinateur sur lequel votre application s’exécute. Comme indiqué dans la section Principes de base de la publication, vous pouvez modifier votre fichier projet afin de changer le framework cible par défaut ou de cibler plusieurs frameworks.
La publication d’un FDE crée une application qui est automatiquement transférée vers le dernier correctif de sécurité .NET disponible sur le système qui exécute l’application. Pour plus d’informations sur la liaison de version au moment de la compilation, consultez Sélectionner la version .NET Core à utiliser.
Mode de publication | Commande |
---|---|
Exécutable dépendant du framework | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
Quand vous utilisez le commutateur -r
, le chemin du dossier de sortie devient : ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/
Si vous utilisez l’exemple d’application, exécutez dotnet publish -f net6.0 -r win-x64 --self-contained false
. Cette commande crée l’exécutable suivant : ./bin/Debug/net6.0/win-x64/publish/apptest1.exe
Notes
Vous pouvez réduire la taille totale de votre déploiement en activant le mode invariant de globalisation. Ce mode est utile pour les applications qui ne sont pas globalement compatibles et qui peuvent utiliser les conventions de mise en forme, les conventions de casse et la comparaison de chaînes, ainsi que l’ordre de tri de la culture invariante. Pour plus d’informations sur le mode invariant de globalisation et sur la façon de l’activer, consultez Mode invariant de globalisation .NET.
Configurer le comportement de recherche de l'installation .NET
Dans .NET 9 et les versions ultérieures, vous pouvez configurer les chemins de recherche de l'installation .NET de l'exécutable publié via les propriétés AppHostDotNetSearch
et AppHostRelativeDotNet
.
AppHostDotNetSearch
permet de spécifier un ou plusieurs emplacements où l'exécutable recherchera une installation .NET :
AppLocal
: dossier de l'exécutable de l'applicationAppRelative
: chemin relatif à l'exécutable de l'applicationEnvironmentVariables
: valeur des variables d'environnementDOTNET_ROOT[_<arch>]
Global
: emplacements enregistrés et par défaut de l'installation globale
AppHostRelativeDotNet
spécifie le chemin relatif à l'exécutable qui sera recherché lorsque AppHostDotNetSearch
contient AppRelative
.
Pour plus d'informations, voir AppHostDotNetSearch
, AppHostRelativeDotNet
et options d'emplacement d'installation dans apphost.
Déploiement autonome
Lorsque vous publiez un déploiement autonome (SCD), le Kit de développement logiciel (SDK) .NET crée un exécutable spécifique à la plateforme. La publication d’un déploiement autonome inclut tous les fichiers .NET nécessaires à l’exécution de votre application, mais pas les dépendances natives de .NET (par exemple, pour .NET 6 sur Linux ou .NET 8 sur Linux). Ces dépendances doivent être présentes sur le système avant l’exécution de l’application.
La publication d’un SCD crée une application qui n’est pas transférée à la dernière version du correctif de sécurité .NET disponible. Pour plus d’informations sur la liaison de version au moment de la compilation, consultez Sélectionner la version .NET Core à utiliser.
Vous devez utiliser les commutateurs suivants avec la commande dotnet publish
pour publier un déploiement autonome :
-r <RID>
Ce commutateur utilise un identificateur (RID) pour spécifier la plateforme cible. Pour obtenir une liste des identificateurs de runtime, consultez Catalogue d’identificateurs de runtime (RID).
--self-contained true
Ce commutateur indique au Kit de développement logiciel (SDK) .NET qu’il doit créer un exécutable sous forme de déploiement autonome.
Mode de publication | Commande |
---|---|
Déploiement autonome | dotnet publish -c Release -r <RID> --self-contained true |
Conseil
- Dans .NET 6 et versions ultérieures, vous pouvez réduire la taille totale des applications autonomes compatibles en publiant rogné. Cela permet au découpage de supprimer des parties de l’infrastructure et des assemblys référencés qui ne se trouvent pas sur un chemin de code ou potentiellement référencés dans la réflexion de l’exécution. Consultez les incompatibilités de découpage pour déterminer si le découpage est judicieux pour votre application.
- Vous pouvez réduire la taille totale de votre déploiement en activant le mode invariant de globalisation. Ce mode est utile pour les applications qui ne sont pas globalement compatibles et qui peuvent utiliser les conventions de mise en forme, les conventions de casse et la comparaison de chaînes, ainsi que l’ordre de tri de la culture invariante. Pour plus d’informations sur le mode invariant de globalisation et sur la façon de l’activer, consultez Mode invariant de globalisation .NET Core.