Freigeben über


Exemplarische Vorgehensweise: Bedarfsgerechtes Herunterladen von Satellitenassemblys mit der API für die ClickOnce-Bereitstellung unter Verwendung des Designers

Mit Windows Forms-Anwendungen können mehrere Kulturen mithilfe von Satellitenassemblys konfiguriert werden. Eine Satellitenassembly ist eine Assembly, die Anwendungsressourcen für eine andere Kultur als die Standardkultur der Anwendung enthält.

Wie in Lokalisieren von ClickOnce-Anwendungen erläutert, können Sie mehrere Satellitenassemblys für mehrere Kulturen innerhalb derselben ClickOnce-Bereitstellung einschließen. In der Standardeinstellung werden von ClickOnce alle Satellitenassemblys in Ihrer Bereitstellung auf den Clientcomputer heruntergeladen, obwohl ein einzelner Client wahrscheinlich nur eine Satellitenassembly benötigt.

Diese exemplarische Vorgehensweise beschreibt, wie Sie Ihre Satellitenassemblys als optional kennzeichnen und nur die Assembly herunterladen, die ein Clientcomputer für die eigenen aktuellen Kultureinstellungen benötigt.

Hinweis

Die Klasse ApplicationDeployment und die APIs im Namespace System.Deployment.Application werden in .NET Core und .NET 5 und höheren Versionen nicht unterstützt. In .NET 7 wird eine neue Methode für den Zugriff auf Anwendungsbereitstellungseigenschaften unterstützt. Weitere Informationen finden Sie unter Zugreifen auf ClickOnce-Bereitstellungseigenschaften in .NET. .NET 7 unterstützt nicht das Äquivalent von ApplicationDeployment-Methoden.

Hinweis

Zu Testzwecken legen die folgenden Codebeispiele die Kultur programmgesteuert auf ja-JP fest. Im Abschnitt "Nächste Schritte" weiter unten in diesem Thema finden Sie Informationen zum Anpassen dieses Codes für eine Produktionsumgebung.

So markieren Sie Satellitenassemblys als optional

  1. Erstellen Sie das Projekt. Dadurch werden Satellitenassemblys für alle Kulturen generiert, die Sie lokalisieren.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und klicken Sie dann auf Eigenschaften.

  3. Klicken Sie auf die Registerkarte Veröffentlichen, und klicken Sie dann auf die Anwendungsdateien.

  4. Aktivieren Sie das Kontrollkästchen Alle Dateien anzeigen, um Satellitenassemblys anzuzeigen. Standardmäßig werden alle Satellitenassemblys in Ihre Bereitstellung aufgenommen und in diesem Dialogfeld angezeigt.

    Der Name einer Satellitenassembly besitzt folgendes Format: <isoCode>\ApplicationName.resources.dll. Dabei entspricht <isoCode> einer Sprachen-ID im Format RFC 1766.

  5. Klicken Sie in der Liste Downloadgruppe für jede Sprachen-ID auf Neu. Wenn Sie zur Eingabe eines Downloadgruppennamens aufgefordert werden, geben Sie die Sprach-ID ein. Geben Sie z. B. für eine japanische Satellitenassembly den Downloadgruppennamen ja-JP an.

  6. Schließen Sie das Dialogfeld Anwendungsdateien.

So laden Sie Satellitenassemblys bei Bedarf in C# herunter

  1. Öffnen Sie die Datei Program.cs. Wenn diese Datei nicht im Projektmappen-Explorer angezeigt wird, wählen Sie das Projekt aus, und klicken Sie im Menü Projekt auf Alle Dateien anzeigen.

  2. Verwenden Sie den folgenden Code, um die entsprechende Satellitenassembly herunterzuladen und die Anwendung zu starten.

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Threading;
    using System.Globalization;
    using System.Deployment.Application;
    using System.Reflection;
    
    namespace ClickOnce.SatelliteAssemblies
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP");
    
                // Call this before initializing the main form, which will cause the resource manager
                // to look for the appropriate satellite assembly.
                GetSatelliteAssemblies(Thread.CurrentThread.CurrentCulture.ToString());
    
                Application.Run(new Form1());
            }
    
            static void GetSatelliteAssemblies(string groupName)
            {
                if (ApplicationDeployment.IsNetworkDeployed)
                {
                    ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;
    
                    if (deploy.IsFirstRun)
                    {
                        try
                        {
                            deploy.DownloadFileGroup(groupName);
                        }
                        catch (DeploymentException de)
                        {
                            // Log error. Do not report this error to the user, because a satellite
                            // assembly may not exist if the user's culture and the application's
                            // default culture match.
                        }
                    }
                }
            }
    
        }
    }
    

So laden Sie Satellitenassemblys bei Bedarf in Visual Basic herunter

  1. Klicken Sie im Fenster Eigenschaften der Anwendung auf die Registerkarte Anwendung.

  2. Klicken Sie unten auf der Registerkarte auf Anwendungsereignisse anzeigen.

  3. Fügen Sie folgenden Importanweisungen am Anfang der Datei ApplicationEvents.VB hinzu.

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Fügen Sie der MyApplication -Klasse den folgenden Code hinzu.

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        Thread.CurrentThread.CurrentUICulture = New CultureInfo("ja-JP")
        GetSatelliteAssemblies(Thread.CurrentThread.CurrentUICulture.ToString())
    End Sub
    
    Private Shared Sub GetSatelliteAssemblies(ByVal groupName As String)
        If (ApplicationDeployment.IsNetworkDeployed) Then
    
            Dim deploy As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
    
            If (deploy.IsFirstRun) Then
                Try
                    deploy.DownloadFileGroup(groupName)
                Catch de As DeploymentException
                    ' Log error. Do not report this error to the user, because a satellite
                    ' assembly may not exist if the user's culture and the application's
                    ' default culture match.
                End Try
            End If
        End If
    End Sub
    

Nächste Schritte

In einer Produktionsumgebung müssen Sie wahrscheinlich die Zeile in den Codebeispielen entfernen, die CurrentUICulture auf einen bestimmten Wert festlegt, da auf Clientcomputern der richtige Wert standardmäßig festgelegt ist. Beim Ausführen der Anwendung auf einem japanischen Clientcomputer ist CurrentUICulture z. B. standardmäßig ja-JP . Das programmgesteuerte Festlegen ist eine gute Möglichkeit, die Satellitenassemblys zu testen, bevor Sie die Anwendung bereitstellen.