Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique décrit les propriétés project que vous pouvez définir dans votre fichier Visual Studio project (par exemple, .csproj ou .vcxproj) afin de personnaliser la façon dont votre application est déployée, notamment la configuration des initialiseurs automatiques.
Initialiseurs automatiques dans le SDK d'application Windows
Dans le SDK d'application Windows, il existe plusieurs routines dont le travail consiste à s’assurer que le runtime application Windows est correctement initialisé. Ces routines sont appelées initialiseurs automatiques, car elles s’exécutent automatiquement avant le point d’entrée de votre application et effectuent un travail d’initialisation pour vous.
Conseil / Astuce
Si vous êtes curieux de détails techniques. En C++, un initialiseur automatique est implémenté avec un constructeur de classe statique. En C#, un initialiseur automatique est implémenté avec un initialiseur de module .NET. Vous pouvez donc parfois entendre l’initialiseur de module utilisé lorsque le terme approprié est l’initialiseur automatique.
Tous les initialiseurs automatiques sont activés de manière conditionnelle par défaut, en fonction de la configuration d’empaquetage et de déploiement de votre application. Voici des détails sur ceux-ci :
- Initialiseur automatique Bootstrapper (également appelé dépendances dynamiques). Cet initialiseur automatique appelle l'API de bootstrapper au démarrage de l’application. Il est nécessaire pour les applications non empaquetées dépendantes de l'infrastructure, afin de s'assurer que le runtime application Windows est ajouté au graphe de package de l'application. Pour plus d’informations sur les applications dépendantes du framework (et autonomes), consultez SDK d'application Windows vue d’ensemble du déploiement. Pour plus d’informations sur les applications non empaquetées (et empaquetées), consultez les applications Windows : empaquetage, déploiement et processus.
- Pour une application empaquetée, vous n'avez pas besoin de l'initialiseur automatique des dépendances de démarrage ou des dépendances dynamiques, car le fichier
appxmanifest.xmlexprime la dépendance au framework. Et pour une application autonome, vous n’avez pas besoin de l'initialiseur automatique des dépendances bootstrap/ dynamiques, car ces applications n’utilisent pas le cadre. - Vous pouvez désactiver le programme d’amorçage/l’initialiseur automatique des dépendances dynamiques dans votre fichier
.csprojou.vcxprojvia<WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>.
- Pour une application empaquetée, vous n'avez pas besoin de l'initialiseur automatique des dépendances de démarrage ou des dépendances dynamiques, car le fichier
- Initialiseur automatique du Gestionnaire de déploiement. Cela est nécessaire pour les applications empaquetées dépendantes de l’infrastructure qui utilisent la fonctionnalité main/singleton (par exemple, les notifications Push), car le
appxmanifest.xmlfichier ne peut pas exprimer ces dépendances.- Pour une application autonome, vous n’avez pas besoin de l’auto-initialiseur du Gestionnaire de déploiement, car ces applications ne prennent pas en charge la fonctionnalité de point d'entrée unique ou singleton.
- Pour plus d'informations plus importantes, consultez la section Initialisation automatique du Gestionnaire de déploiement plus loin dans cette rubrique.
- Initialiseur automatique d’activation sans inscription. Cela est nécessaire pour qu'une application autonome utilise l'activation sans inscription de Windows Runtime (WinRT) basée sur un manifeste (UndockedRegFreeWinRT), si l'application s'exécute sur une version de système d'exploitation antérieure à la mise à jour de mai 2019 de Windows 10 (version 1903 ; nommée « 19H1 »).
- Pour les applications dépendantes de l'infrastructure et pour les applications autonomes qui ciblent Windows 10, version 1903 ou ultérieure, vous n'avez pas besoin de l'initialiseur d'activation sans inscription. Ces applications peuvent se désinscrire via
<WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>.
- Pour les applications dépendantes de l'infrastructure et pour les applications autonomes qui ciblent Windows 10, version 1903 ou ultérieure, vous n'avez pas besoin de l'initialiseur d'activation sans inscription. Ces applications peuvent se désinscrire via
- Initialiseur automatique de compatibilité. Cela est nécessaire pour qu’une application utilise des environnements de confinement A/B pour contrôler le comportement de déploiement de la maintenance. Pour plus d’informations, consultez RuntimeCompatibilityOptions.
- Pour les applications qui n’utilisent pas le conteneur A/B (qui est la valeur par défaut), vous n’avez pas besoin de l’initialiseur automatique de compatibilité.
Initialiseur automatique du Gestionnaire de déploiement
Lorsqu’une application qui utilise le SDK d'application Windows 1.8 ou version ultérieure démarre, l’initialiseur du Gestionnaire de déploiement s’exécute par défaut. Mais vous pouvez choisir de ne pas participer à cela. Cette section explique les avantages et les inconvénients de l’activation de l’auto-initialisateur du Gestionnaire de déploiement, et vous aide à décider s’il faut ou non se désinscrire.
Pour que votre application utilise des fonctionnalités dans les packages Main/Singleton (par exemple, les notifications Push) : 1. Vous devez utiliser l’API de déploiement pour vous assurer que ces packages sont déployés (car les packages Main/Singleton ne sont pas des frameworks, mais des packages « principaux », tels que des applications ; ils ne peuvent donc pas être inscrits en tant que dépendances dans le manifeste appx de votre application. Au lieu de cela, l’API de déploiement fournit la fonctionnalité de déploiement de ces packages). 2. En raison de 1), votre application doit initialiser le Gestionnaire de déploiement en provoquant l’appel de DeploymentManager.Initialize . Votre application peut le faire automatiquement, ou explicitement, comme nous le verrons. 3. Votre application doit être une application empaquetée dépendante de l’infrastructure afin qu’elle prenne une dépendance sur les packages Main/Singleton.
L’une des méthodes d’initialisation du Gestionnaire de déploiement consiste à autoriser l’initialiseur Deployment Manager à s’exécuter (voir la section Auto-initialiseurs dans le SDK d'application Windows plus haut dans cette rubrique). L'auto-initialiseur du Gestionnaire de déploiement appelle DeploymentManager.Initialize pour vous. L’autre façon d’initialiser le Gestionnaire de déploiement consiste à appeler explicitement DeploymentManager.Initialize vous-même .
Si votre application (à l'aide du SDK d'application Windows 1.8 ou version ultérieure) n'a pas besoin des packages Main/Singleton, vous devez ensuite désactiver l'initialiseur du Gestionnaire de déploiement en définissant la propriété WindowsAppSdkDeploymentManagerInitialize sur false dans le fichier project de votre application.
Si votre application (à l’aide du SDK d'application Windows 1.8 ou version ultérieure) a besoin des packages Main/Singleton, vous pouvez :
- Autoriser l’initialiseur du Gestionnaire de déploiement à s’exécuter, ce qu'il fait par défaut.
- ou désactivez l'initialiseur automatique du Gestionnaire de déploiement en définissant la propriété WindowsAppSdkDeploymentManagerInitialize sur false dans le fichier project de votre application. Vous devez ensuite vous-même appeler explicitement DeploymentManager.Initialize.
Important
Pour tout processus en cours d’exécution dans AppContainer, si vous provoquez l’appel de DeploymentManager.Initialize , votre application doit déclarer la packageManagementfonctionnalité restreinte dans le manifeste de votre package.
Propriétés du projet
Dans le tableau ci-dessous figurent les propriétés que vous pouvez définir dans le fichier project de votre application. Consultez la section précédente (ci-dessus) pour plus d’informations sur les initialiseurs automatiques dans le SDK d'application Windows.
| Nom et description de la propriété | Valeurs | Pour plus d’informations |
|---|---|---|
| AppxPackage. Spécifie si une application WinUI est empaquetée ou non. | false (pour une application non empaquetée) ou absent (pour une application empaquetée) | Annuler le package d’une application WinUI |
| EnableMsixTooling. Active la fonctionnalité MSIX pour un projet unique. | true (pour activer) ou absent (pour désactiver) | Packagez votre application en utilisant un projet unique MSIX |
| UseCrtSDKReferenceStaticWarning. Supprime l’avertissement de build qui se déclenche lorsqu’une application empaquetée C++ lie le CRT statiquement (requis pour le déploiement autonome à l’aide du CRT hybride). Définissez sur false dans les projets d’application empaquetée qui optent pour le CRT hybride. | false (pour supprimer l’avertissement dans les applications autonomes empaquetées) ou absent (valeur par défaut, avertissement activé) | guide de déploiement SDK d'application Windows pour les applications autonomes |
| UseWinUI. Spécifie si vous utilisez l’infrastructure d’interface utilisateur WinUI dans votre application. | true, ou absent (pour false) | WinUI dans le SDK d'application Windows (WinUI) |
WindowsAppSDKSingleFileVerifyConfiguration. Contrôle si le SDK exécute une cible de validation à la compilation lorsque PublishSingleFile est défini. Lorsqu’elle est activée (valeur par défaut), la cible émet des erreurs si les propriétés requises sont manquantes (EnableMsixTooling, , WindowsPackageType=NoneIncludeAllContentForSelfExtract) et les avertissements si les paramètres autonomes sont absents (WindowsAppSDKSelfContained, SelfContained). Définissez la valeur false uniquement pour supprimer toutes les vérifications , par exemple, dans les pipelines CI où vous avez vérifié la conformité manuellement. |
true (valeur par défaut : exécutions de validation), false (supprimer toutes les vérifications) | Défini dans Microsoft.WindowsAppSDK.SingleFile.targets (inclus automatiquement par le package NuGet quand PublishSingleFile il est défini) |
| WindowsAppSdkBootstrapInitialize. Détermine si le SDK d'application Windows tire parti de l’initialiseur automatique des dépendances de démarrage/dynamiques. | true (valeur par défaut pour les exécutables), false (valeur par défaut pour les non-exécutables) | Activer ou désactiver les initialiseurs automatiques |
| WindowsAppSdkDeploymentManagerInitialize. Détermine si le SDK d'application Windows tire parti de l’initialiseur automatique du Gestionnaire de déploiement. | true (valeur par défaut), false | |
| WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2 et WindowsAppSDKDisabledChanges. Détermine si le SDK d'application Windows tire parti de l’initialiseur automatique de compatibilité et configure toutes les options de compatibilité voulues pour le comportement à l'exécution des modifications apportées par les mises à jour de maintenance. | Divers ou absents (pour désactiver l’initialiseur automatique) | RuntimeCompatibilityOptions |
| WindowsAppSDKSelfContained. Détermine si une application est déployée autonome ou non. | true, ou absent (pour false) | guide de déploiement SDK d'application Windows pour les applications autonomes |
| WindowsAppSdkUndockedRegFreeWinRTInitialize. Détermine si le SDK d'application Windows tire parti de l’initialiseur automatique d’activation sans inscription. | true (valeur par défaut pour les exécutables), false (valeur par défaut pour les non-exécutables) | Choix de désactiver ou d’activer la prise en charge automatique d’UndockedRegFreeWinRT |
WindowsPackageType. La définition <WindowsPackageType>None</WindowsPackageType> d'une application non empaquetée entraîne l'initialiseur automatique des dépendances de démarrage/dynamiques à localiser et charger une version du SDK d'application Windows qui convient le mieux à votre application. |
Aucun ou absent (pour désactiver l’initialiseur automatique) |
Annuler le package d’une application WinUI En coulisses, et en renonçant aux initialiseurs automatiques |
Example
Voici un extrait d'un fichier .csproj typique pour un projet WinUI 3 C#, montrant certaines des propriétés du projet du tableau ci-dessus en cours d'utilisation.
...
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
...
<UseWinUI>true</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
</PropertyGroup>
...
Rubriques connexes
- Vue d’ensemble du déploiement
- Créez votre premier projet WinUI (SDK d'application Windows)
- Packagez votre application en utilisant un projet unique MSIX
- RuntimeCompatibilityOptions
- Utilisez le runtime SDK d'application Windows pour les applications empaquetées avec un emplacement externe ou non empaqueté
- guide de déploiement SDK d'application Windows pour les applications autonomes
- vue d’ensemble du déploiement SDK d'application Windows
- Applications Windows : empaquetage, déploiement et processus
- WinUI dans le SDK d'application Windows (WinUI)
Windows developer