Share via


Publier une application .NET MAUI non empaquetée pour Windows à l’aide de l’interface CLI

Lorsque vous distribuez votre application .NET Multi-platform App UI (.NET MAUI) pour Windows, vous pouvez publier l’application et ses dépendances dans un dossier pour le déploiement vers un autre système.

Configurer les paramètres de génération du projet

Ajoutez le nœud <PropertyGroup> suivant à votre Fichier projet. Ce groupe de propriétés est traité uniquement lorsque l’infrastructure cible est Windows et que la configuration est définie sur Release. Cette section de configuration s’exécute chaque fois qu’un build ou une publication est en mode Release.

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

La valeur <PropertyGroup> de l’exemple est nécessaire pour contourner un bogue dans le Kit de développement logiciel (SDK) d’application Windows. Pour plus d’informations sur le bogue, consultez le Problème n° 3337 WindowsAppSDK.

Publier

Pour publier votre application, ouvrez l’Invite de commandes développeur pour le terminal VS 2022 et accédez au dossier de votre projet d’application .NET MAUI. Exécutez la commande dotnet publish, en fournissant les paramètres suivants :

Paramètre Valeur
-f Infrastructure cible, c’est-à-dire net8.0-windows{version}. Cette valeur est un TFM Windows, tel que net8.0-windows10.0.19041.0. Vérifiez que cette valeur est identique à la valeur du nœud <TargetFrameworks> dans votre fichier .csproj.
-c Configuration de build, c’est-à-dire Release.
-p:RuntimeIdentifierOverride=win10-x64
- ou -
-p:RuntimeIdentifierOverride=win10-x86
Évite le bogue détaillé dans le Problème n° 3337 WindowsAppSDK. Choisissez la version -x64 ou -x86 du paramètre en fonction de votre plateforme cible.
-p:WindowsPackageType Type de package, qui est None pour des applications non empaquetées.
-p:WindowsAppSDKSelfContained Mode de déploiement pour votre application qui peut être dépendante de l’infrastructure ou autonome. Cette valeur doit être true pour des applications autonomes. Pour obtenir plus d’informations sur les applications dépendantes de l’infrastructure et les applications autonomes, consultez Vue d’ensemble du déploiement du Kit de développement logiciel (SDK) d’application Windows.

Avertissement

La tentative de publication d’une solution .NET MAUI entraîne la commande dotnet publish qui tente de publier chaque projet dans la solution individuellement, ce qui peut entraîner des problèmes lorsque vous avez ajouté d’autres types de projets à votre solution. Par conséquent, la commande dotnet publish doit être étendue à votre projet d’application .NET MAUI.

Par exemple :

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None

Remarque

Dans .NET 8, la commande dotnet publish est par défaut dans la configuration Release. Par conséquent, la configuration de build peut être omise à partir de la ligne de commande.

La publication génère l’application, en copiant l’exécutable dans le dossier bin\Release\net8.0-windows10.0.19041.0\win10-x64\publish. Dans ce dossier, il existe un fichier exe et c’est l’application générée. Cette application peut être lancée ou l’intégralité du dossier peut être copié sur une autre machine et lancé dans cet emplacement.

La distinction importante d’une application empaquetée est qu’elle n’inclut pas le runtime .NET dans le dossier. Cela signifie que l’application nécessite l’installation du runtime .NET sur les machines qui vont exécuter l’application. Pour vérifier que l’application contient également tous les composants de runtime, l’argument -p:WindowsAppSDKSelfContained peut être fourni lors de la publication. Par exemple :

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None -p:WindowsAppSDKSelfContained=true

Pour plus d’informations sur la commande dotnet publish, consultez dotnet publish.