Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Standaard worden alle assembly's die zijn opgenomen in een ClickOnce-toepassing gedownload wanneer de toepassing voor het eerst wordt uitgevoerd. Er kunnen echter onderdelen van uw toepassing zijn die worden gebruikt door een kleine set gebruikers. In dit geval wilt u een assembly alleen downloaden wanneer u een van de typen ervan maakt. In de volgende procedure ziet u hoe u bepaalde assembly's in uw toepassing markeert als 'optioneel' en hoe u deze kunt downloaden met behulp van klassen in de System.Deployment.Application naamruimte wanneer de algemene taalruntime deze vereist.
Opmerking
De ApplicationDeployment klasse en API's in de System.Deployment.Application naamruimte worden niet ondersteund in .NET Core en .NET 5 en latere versies. In .NET 7 wordt een nieuwe methode voor het openen van toepassingsimplementatie-eigenschappen ondersteund. Zie Access ClickOnce-implementatie-eigenschappen in .NET voor meer informatie. .NET 7 biedt geen ondersteuning voor het equivalent van ApplicationDeployment-methoden.
Opmerking
Uw toepassing moet in volledige vertrouwen draaien om deze procedure te kunnen gebruiken.
Opmerking
De dialoogvensters en menuopdrachten die u ziet, kunnen afwijken van de dialoogvensters die worden beschreven in Help, afhankelijk van uw actieve instellingen of editie. Klik op Import- en exportinstellingen in het menu Extra om uw instellingen te wijzigen. Zie Instellingen opnieuw instellen voor meer informatie.
De projecten maken
Een project maken dat gebruikmaakt van een assembly op aanvraag met Visual Studio
Maak een nieuw Windows Forms-project in Visual Studio. Wijs in het menu Bestand de optie Toevoegen aan en klik vervolgens op Nieuw project. Kies een Class Library-project in het dialoogvenster en geef het een
ClickOnceLibrarynaam.Opmerking
In Visual Basic wordt u aangeraden de projecteigenschappen te wijzigen om de hoofdnaamruimte voor dit project te wijzigen in
Microsoft.Samples.ClickOnceOnDemandof in een naamruimte van uw keuze. Ter vereenvoudiging bevinden de twee projecten in dit scenario zich in dezelfde naamruimte.Definieer een klasse met een naam
DynamicClassmet één eigenschap met de naamMessage.Selecteer het Windows Forms-project in Solution Explorer. Voeg een verwijzing naar de System.Deployment.Application assembly en een projectreferentie toe aan het
ClickOnceLibraryproject.Opmerking
In Visual Basic wordt u aangeraden de projecteigenschappen te wijzigen om de hoofdnaamruimte voor dit project te wijzigen in
Microsoft.Samples.ClickOnceOnDemandof in een naamruimte van uw keuze. Ter vereenvoudiging bevinden de twee projecten in dit scenario zich in dezelfde naamruimte.Klik met de rechtermuisknop op het formulier, klik op Code weergeven in het menu en voeg de volgende verwijzingen toe aan het formulier.
Voeg de volgende code toe om deze assembly op aanvraag te downloaden. Deze code laat zien hoe u een set assembly’s kunt toewijzen aan een groepsnaam met behulp van een generieke Dictionary klasse. Omdat we slechts één assembly in deze handleiding downloaden, is er maar één assembly in onze groep. In een echte toepassing wilt u waarschijnlijk alle assembly's met betrekking tot één functie in uw toepassing tegelijk downloaden. Met de toewijzingstabel kunt u dit eenvoudig doen door alle DLL's die deel uitmaken van een functie te koppelen aan een downloadgroepnaam.
// 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); }Klik in het menu Beeld op Werkbalk. Sleep een Button van de Toolbox naar het formulier. Dubbelklik op de knop en voeg de volgende code toe aan de Click gebeurtenis-handler.
Assemblages markeren als optioneel
Assemblages als optioneel markeren in uw ClickOnce-toepassing met behulp van Visual Studio
Klik met de rechtermuisknop op het Windows Forms-project in Solution Explorer en klik op Eigenschappen. Selecteer het tabblad Publiceren .
Klik op de knop Toepassingsbestanden .
Zoek de vermelding voor ClickOnceLibrary.dll. Stel de vervolgkeuzelijst Publicatiestatus in op Opnemen.
Vouw de vervolgkeuzelijst Groep uit en selecteer Nieuw. Voer de naam
ClickOnceLibraryin als de nieuwe groepsnaam.Ga door met het publiceren van uw toepassing, zoals beschreven in Procedure: Een ClickOnce-toepassing publiceren met behulp van de wizard Publiceren.
Assembly's als optioneel markeren in uw ClickOnce-toepassing met gebruik van het hulpprogramma voor het genereren en bewerken van manifesten (grafische client) (MageUI.exe)
Maak uw ClickOnce-manifesten zoals beschreven in Walkthrough: Een ClickOnce-toepassing handmatig implementeren.
Voordat u MageUI.exesluit, selecteert u het tabblad met het toepassingsmanifest van uw implementatie en selecteert u op dat tabblad het tabblad Bestanden .
Zoek ClickOnceLibrary.dll in de lijst met toepassingsbestanden en stel de kolom Bestandstype in op Geen. Voor de kolom Groep typt u
ClickOnceLibrary.dll.
De nieuwe assembly testen
Om uw on-demand assembly te testen:
Start uw toepassing die is geïmplementeerd met ClickOnce.
Wanneer het hoofdformulier wordt weergegeven, drukt u op de Buttonknop . U ziet nu een tekenreeks in een berichtvenster met de tekst 'Hallo, wereld!'