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.
Par défaut, tous les assemblys inclus dans une application ClickOnce sont téléchargés lors de la première exécution de l’application. Toutefois, il peut y avoir des parties de votre application utilisées par un petit ensemble d’utilisateurs. Dans ce cas, vous souhaitez télécharger un assembly uniquement lorsque vous créez l’un de ses types. La procédure pas à pas suivante montre comment marquer certains assemblys dans votre application comme « facultatifs » et comment les télécharger à l’aide de classes dans l’espace de noms System.Deployment.Application lorsqu'ils sont requis par le Common Language Runtime.
Note
La classe ApplicationDeployment et les API de l’espace de noms System.Deployment.Application ne sont pas prises en charge dans .NET Core et .NET 5 et les versions ultérieures. Dans .NET 7, une nouvelle méthode d’accès aux propriétés de déploiement d’application est prise en charge. Pour plus d’informations, consultez les propriétés de déploiement Access ClickOnce dans .NET. .NET 7 ne prend pas en charge l’équivalent des méthodes ApplicationDeployment.
Note
Votre application doit s’exécuter en toute confiance pour utiliser cette procédure.
Note
Les boîtes de dialogue et les commandes de menu que vous voyez peuvent différer de celles décrites dans l’aide en fonction de vos paramètres actifs ou édition. Pour modifier vos paramètres, cliquez sur Importer et exporter des paramètres dans le menu Outils . Pour plus d’informations, consultez Réinitialiser les paramètres.
Créer les projets
Pour créer un projet qui utilise un assembly à la demande avec Visual Studio
Créez un projet Windows Forms dans Visual Studio. Dans le menu Fichier , pointez sur Ajouter, puis cliquez sur Nouveau projet. Choisissez un projet bibliothèque de classes dans la boîte de dialogue et nommez-le
ClickOnceLibrary.Note
Dans Visual Basic, nous vous recommandons de modifier les propriétés du projet pour modifier l’espace de noms racine de ce projet
Microsoft.Samples.ClickOnceOnDemandvers ou vers un espace de noms de votre choix. Par souci de simplicité, les deux projets de cette procédure pas à pas se trouvent dans le même espace de noms.Définissez une classe nommée
DynamicClassavec une propriété unique nomméeMessage.Sélectionnez le projet Windows Forms dans l’Explorateur de solutions. Ajoutez une référence à l’assembly System.Deployment.Application et une référence de projet à
ClickOnceLibrary.Note
Dans Visual Basic, nous vous recommandons de modifier les propriétés du projet pour modifier l’espace de noms racine de ce projet
Microsoft.Samples.ClickOnceOnDemandvers ou vers un espace de noms de votre choix. Par souci de simplicité, les deux projets de cette procédure pas à pas se trouvent dans le même espace de noms.Cliquez avec le bouton droit sur le formulaire, cliquez sur Afficher le code dans le menu, puis ajoutez les références suivantes au formulaire.
Ajoutez le code suivant pour télécharger cet assembly à la demande. Ce code montre comment mapper un ensemble d’assemblys à un nom de groupe à l’aide d’une classe générique Dictionary . Étant donné que nous téléchargeons uniquement un seul assembly dans cette procédure pas à pas, il n’existe qu’un seul assembly dans notre groupe. Dans une application réelle, vous souhaiterez probablement télécharger tous les assemblys liés à une seule fonctionnalité de votre application en même temps. La table de mappage vous permet de le faire facilement en associant toutes les DLL qui appartiennent à une fonctionnalité avec un nom de groupe de téléchargement.
// Maintain a dictionary mapping DLL names to download file groups. This is trivial for this sample, // but will be important in real-world applications where a feature is spread across multiple DLLs, // and you want to download all DLLs for that feature in one shot. Dictionary<String, String> DllMapping = new Dictionary<String, String>(); [SecurityPermission(SecurityAction.Demand, ControlAppDomain=true)] public Form1() { InitializeComponent(); DllMapping["ClickOnceLibrary"] = "ClickOnceLibrary"; AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); } /* * Use ClickOnce APIs to download the assembly on demand. */ private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { Assembly newAssembly = null; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment; // Get the DLL name from the Name argument. string[] nameParts = args.Name.Split(','); string dllName = nameParts[0]; string downloadGroupName = DllMapping[dllName]; try { deploy.DownloadFileGroup(downloadGroupName); } catch (DeploymentException de) { MessageBox.Show("Downloading file group failed. Group name: " + downloadGroupName + "; DLL name: " + args.Name); throw (de); } // Load the assembly. // Assembly.Load() doesn't work here, as the previous failure to load the assembly // is cached by the CLR. LoadFrom() is not recommended. Use LoadFile() instead. try { newAssembly = Assembly.LoadFile(Application.StartupPath + @"\" + dllName + ".dll"); } catch (Exception e) { throw (e); } } else { //Major error - not running under ClickOnce, but missing assembly. Don't know how to recover. throw (new Exception("Cannot load assemblies dynamically - application is not deployed using ClickOnce.")); } return (newAssembly); }Dans le menu Affichage , cliquez sur Boîte à outils. Faites glisser une Button de la Boîte à outils sur le formulaire. Double-cliquez sur le bouton et ajoutez le code suivant au gestionnaire d’événements Click .
Marquer les assemblages comme facultatifs
Pour marquer des assemblys comme facultatifs dans votre application ClickOnce à l’aide de Visual Studio
Cliquez avec le bouton droit sur le projet Windows Forms dans l’Explorateur de solutions , puis cliquez sur Propriétés. Sélectionnez l’onglet Publier .
Cliquez sur le bouton Fichiers d’application .
Recherchez la description de ClickOnceLibrary.dll. Ajustez le menu déroulant État de publication sur Inclure.
Développez la zone de liste déroulante Groupe et sélectionnez Nouveau. Entrez le nom
ClickOnceLibrarycomme nouveau nom de groupe.Continuez à publier votre application comme décrit dans How to : Publish a ClickOnce application using the Publish Wizard.
Pour marquer des assemblys comme facultatifs dans votre application ClickOnce à l’aide de l’outil génération et édition de manifeste — Client graphique (MageUI.exe)
Créez vos manifestes ClickOnce comme décrit dans La procédure pas à pas : déployez manuellement une application ClickOnce.
Avant de fermer MageUI.exe, sélectionnez l’onglet qui contient le manifeste d’application de votre déploiement, puis dans cet onglet, sélectionnez l’onglet Fichiers .
Recherchez ClickOnceLibrary.dll dans la liste des fichiers d’application et définissez sa colonne Type de fichier sur None. Pour la colonne Groupe , tapez
ClickOnceLibrary.dll.
Tester le nouvel assembly
Pour tester votre assemblage à la demande :
Démarrez votre application déployée avec ClickOnce.
Lorsque votre formulaire principal s’affiche, appuyez sur .Button Vous devez voir une chaîne dans une fenêtre de boîte de message qui lit « Hello, World ! »