Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Standardmäßig werden alle assemblys, die in einer ClickOnce-Anwendung enthalten sind, heruntergeladen, wenn die Anwendung zum ersten Mal ausgeführt wird. Es kann jedoch Teile Ihrer Anwendung geben, die von einer kleinen Gruppe der Benutzer verwendet werden. In diesem Fall möchten Sie eine Assembly nur herunterladen, wenn Sie einen seiner Typen erstellen. In der folgenden exemplarischen Vorgehensweise wird veranschaulicht, wie bestimmte Assemblys in Ihrer Anwendung als "optional" gekennzeichnet werden und wie Sie diese mithilfe von Klassen im System.Deployment.Application Namespace herunterladen, wenn die Common Language Runtime sie anfordert.
Hinweis
Die ApplicationDeployment Klasse und APIs im System.Deployment.Application Namespace werden in .NET Core und .NET 5 und höher nicht unterstützt. In .NET 7 wird eine neue Methode für den Zugriff auf Anwendungsbereitstellungseigenschaften unterstützt. Weitere Informationen finden Sie unter Access ClickOnce-Bereitstellungseigenschaften in .NET. .NET 7 unterstützt nicht das Äquivalent von ApplicationDeployment-Methoden.
Hinweis
Ihre Anwendung muss im vollen Vertrauen ausgeführt werden, um dieses Verfahren nutzen zu können.
Hinweis
Die angezeigten Dialogfelder und Menübefehle unterscheiden sich je nach aktiven Einstellungen oder Edition möglicherweise von den in der Hilfe beschriebenen Befehlen. Um Ihre Einstellungen zu ändern, klicken Sie im Menü "Extras" auf "Einstellungen importieren und exportieren". Weitere Informationen finden Sie unter "Einstellungen zurücksetzen".
Erstellen der Projekte
So erstellen Sie ein Projekt, das eine On-Demand-Assembly mit Visual Studio verwendet
Erstellen Sie ein neues Windows Forms-Projekt in Visual Studio. Zeigen Sie im Menü "Datei " auf "Hinzufügen", und klicken Sie dann auf "Neues Projekt". Wählen Sie im Dialogfeld ein Klassenbibliotheksprojekt aus, und nennen Sie es
ClickOnceLibrary.Hinweis
In Visual Basic wird empfohlen, die Projekteigenschaften so zu ändern, dass sie den Stammnamespace für dieses Projekt in
Microsoft.Samples.ClickOnceOnDemandoder in einen Namespace Ihrer Wahl ändern. Der Einfachheit halber befinden sich die beiden Projekte in dieser Anleitung im selben Namespace.Definieren Sie eine Klasse namens
DynamicClassmit einer einzelnen Eigenschaft namensMessage.Wählen Sie im Projektmappen-Explorer das Windows Forms-Projekt aus. Fügen Sie einen Verweis auf die System.Deployment.Application Assembly und einen Projektverweis auf das
ClickOnceLibraryProjekt hinzu.Hinweis
In Visual Basic wird empfohlen, die Projekteigenschaften so zu ändern, dass sie den Stammnamespace für dieses Projekt in
Microsoft.Samples.ClickOnceOnDemandoder in einen Namespace Ihrer Wahl ändern. Der Einfachheit halber befinden sich die beiden Projekte in dieser Anleitung im selben Namespace.Klicken Sie mit der rechten Maustaste auf das Formular, klicken Sie im Menü auf "Code anzeigen ", und fügen Sie dem Formular die folgenden Verweise hinzu.
Fügen Sie den folgenden Code hinzu, um diese Assembly bei Bedarf herunterzuladen. Dieser Code zeigt, wie eine Gruppe von Assemblys einem Gruppennamen mithilfe einer generischen Dictionary Klasse zugeordnet wird. Da wir in dieser exemplarischen Vorgehensweise nur eine einzige Assembly herunterladen, gibt es nur eine Assembly in unserer Gruppe. In einer echten Anwendung würden Sie wahrscheinlich alle Assemblys herunterladen, die sich auf ein einzelnes Feature in Ihrer Anwendung gleichzeitig beziehen. Mithilfe der Zuordnungstabelle können Sie dies ganz einfach tun, indem Sie alle DLLs, die zu einem Feature gehören, einem Downloadgruppennamen zuordnen.
// 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); }Klicken Sie im Menü "Ansicht" auf "Toolbox". Ziehen Sie eine Button aus der Toolbox auf das Formular. Doppelklicken Sie auf die Schaltfläche, und fügen Sie dem Click Ereignishandler den folgenden Code hinzu.
Kennzeichnen von Assemblys als optional
So markieren Sie Assemblys als optional in Ihrer ClickOnce-Anwendung mithilfe von Visual Studio
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Windows Forms-Projekt, und klicken Sie dann auf "Eigenschaften". Wählen Sie die Registerkarte "Veröffentlichen" aus .
Klicken Sie auf die Schaltfläche "Anwendungsdateien ".
Suchen Sie die Auflistung für ClickOnceLibrary.dll. Legen Sie das Dropdownfeld "Veröffentlichungsstatus " auf "Einschließen" fest.
Erweitern Sie das Dropdownfeld "Gruppe ", und wählen Sie " Neu" aus. Geben Sie den Namen
ClickOnceLibraryals neuen Gruppennamen ein.Setzen Sie die Veröffentlichung Ihrer Anwendung wie unter "How to: Publish a ClickOnce application using the Publish Wizard" beschrieben fort.
So markieren Sie Assemblys als optional in Ihrer ClickOnce-Anwendung mithilfe des Manifestgenerierungs- und Bearbeitungstools – grafischer Client (MageUI.exe)
Erstellen Sie Ihre ClickOnce-Manifeste, wie in der Anleitung beschrieben: Manuelle Bereitstellung einer ClickOnce-Anwendung.
Wählen Sie vor dem Schließen MageUI.exedie Registerkarte aus, die das Anwendungsmanifest Ihrer Bereitstellung enthält, und wählen Sie auf dieser Registerkarte die Registerkarte "Dateien " aus.
Suchen Sie ClickOnceLibrary.dll in der Liste der Anwendungsdateien, und legen Sie die Spalte "Dateityp" auf "Keine" fest. Geben Sie für die Spalte
ClickOnceLibrary.dll" ein.
Testen Sie die neue Assembly
So testen Sie Ihre On-Demand-Assembly:
Starten Sie die mit ClickOnce bereitgestellte Anwendung.
Wenn das Hauptformular angezeigt wird, drücken Sie die Button. Sie sollten eine Zeichenfolge in einem Meldungsfeldfenster sehen, in dem "Hello, World!" steht.