Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Som standard laddas alla sammansättningar som ingår i ett ClickOnce-program ned när programmet först körs. Du kan dock ha delar av programmet som används av en liten uppsättning användare. I det här fallet vill du bara ladda ned en sammansättning när du skapar en av dess typer. Följande genomgång visar hur du markerar vissa sammansättningar i ditt program som "valfria" och hur du laddar ned dem med hjälp av klasser i System.Deployment.Application namnområdet när CLR (Common Language Runtime) kräver dem.
Anmärkning
Klassen ApplicationDeployment och API:erna System.Deployment.Application i namnområdet stöds inte i .NET Core- och .NET 5- och senare versioner. I .NET 7 stöds en ny metod för att komma åt egenskaper för programdistribution. Mer information finns i Access ClickOnce distributionsegenskaper i .NET. .NET 7 stöder inte motsvarigheten till ApplicationDeployment-metoder.
Anmärkning
Din applikation måste köras med fullständiga rättigheter för att kunna använda denna procedur.
Förutsättningar
Du behöver någon av följande komponenter för att slutföra den här genomgången:
The Windows SDK. Windows SDK kan laddas ned från Microsoft Download Center.
Visual Studio.
Skapa projekten
Skapa ett projekt som använder en sammansättning på begäran
Skapa en katalog med namnet ClickOnceOnDemand.
Öppna Kommandotolken för Windows SDK eller Visual Studio-kommandotolken.
Byt till mappen ClickOnceOnDemand.
Generera ett offentligt/privat nyckelpar med följande kommando:
sn -k TestKey.snkAnvänd Anteckningar eller en annan textredigerare och definiera en klass med namnet
DynamicClassmed en enda egenskap med namnetMessage.Spara texten som en fil med namnet ClickOnceLibrary.cs eller ClickOnceLibrary.vb, beroende på vilket språk du använder, i katalogen ClickOnceOnDemand .
Kompilera filen till en sammansättning.
Använd följande kommando för att hämta den offentliga nyckeltoken för sammansättningen:
sn -T ClickOnceLibrary.dllSkapa en ny fil med textredigeraren och ange följande kod. Den här koden skapar ett Windows Forms-program som laddar ned ClickOnceLibrary-sammansättningen när det behövs.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; using System.Deployment.Application; using Microsoft.Samples.ClickOnceOnDemand; namespace ClickOnceOnDemand { [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Unrestricted=true)] public class Form1 : Form { // 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>(); public static void Main() { Form1 NewForm = new Form1(); Application.Run(NewForm); } public Form1() { // Configure form. this.Size = new Size(500, 200); Button getAssemblyButton = new Button(); getAssemblyButton.Size = new Size(130, getAssemblyButton.Size.Height); getAssemblyButton.Text = "Test Assembly"; getAssemblyButton.Location = new Point(50, 50); this.Controls.Add(getAssemblyButton); getAssemblyButton.Click += new EventHandler(getAssemblyButton_Click); 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," + "Version=1.0.0.0, Culture=en, PublicKeyToken=03689116d3a4ae33"); } 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); } private void getAssemblyButton_Click(object sender, EventArgs e) { DynamicClass dc = new DynamicClass(); MessageBox.Show("Message: " + dc.Message); } } }Leta upp anropet till LoadFile i koden.
Ange
PublicKeyTokentill det värde som du hämtade tidigare.Spara filen som antingen Form1.cs eller Form1.vb.
Kompilera den till en körbar fil med hjälp av följande kommando.
Markera sammansättningar som valfria
Markera sammansättningar som valfria i ditt ClickOnce-program med hjälp av MageUI.exe
Använd MageUI.exeoch skapa ett programmanifest enligt beskrivningen i Genomgång: Distribuera ett ClickOnce-program manuellt. Använd följande inställningar för programmanifestet:
Ge programmanifestet namnet
ClickOnceOnDemand.På sidan Filer i raden ClickOnceLibrary.dll anger du kolumnen Filtyp till Ingen.
På sidan Filer, i raden ClickOnceLibrary.dll, skriv i kolumnen
ClickOnceLibrary.dll.
Använd MageUI.exeoch skapa ett distributionsmanifest enligt beskrivningen i Genomgång: Distribuera ett ClickOnce-program manuellt. Använd följande inställningar för distributionsmanifestet:
- Ge namnet distributionsmanifest
ClickOnceOnDemand.
- Ge namnet distributionsmanifest
Testa den nya sammansättningen
Testa din sammansättning på begäran
Ladda upp clickOnce-distributionen till en webbserver.
Starta ditt program som distribuerats med ClickOnce från en webbläsare genom att ange URL:en till distributionsmanifestet. Om du anropar ditt ClickOnce-program
ClickOnceOnDemandoch laddar upp det till rotkatalogen för adatum.com ser URL:en ut så här:http://www.adatum.com/ClickOnceOnDemand/ClickOnceOnDemand.applicationNär huvudformuläret visas trycker du på Button. Du bör se en sträng i ett meddelanderutefönster med texten "Hello, World!".