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

Windows Forms-Anwendungen können mit Satellitenassemblys für mehrere Kulturen konfiguriert werden.Eine Satellitenassembly ist eine Assembly, die Anwendungsressourcen für eine Kultur enthält, bei der es sich nicht um die Standardkultur der Anwendung handelt.

Wie unter Lokalisieren von ClickOnce-Anwendungen erläutert, können Sie in ein und dieselbe ClickOnce-Bereitstellung mehrere Satellitenassemblys für mehrere Kulturen aufnehmen.Standardmäßig lädt ClickOnce alle Satellitenassemblys in Ihrer Bereitstellung auf den Clientcomputer herunter, auch wenn ein einzelner Client wahrscheinlich nur eine Satellitenassembly benötigt.

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie Sie Ihre Satellitenassemblys als optional kennzeichnen und nur die Assembly herunterladen, die ein Clientcomputer für die eigenen aktuellen Kultureinstellungen benötigt.

HinweisHinweis

In den folgenden Codebeispielen wird die Kultur zu Testzwecken programmgesteuert auf ja-JP festgelegt.Wie Sie diesen Code für eine Produktionsumgebung anpassen, erfahren Sie im Abschnitt "Nächste Schritte" weiter unten in diesem Thema.

Vorbereitungsmaßnahmen

In diesem Thema wird davon ausgegangen, dass Sie wissen, wie der Anwendung mit Visual Studio lokalisierte Ressourcen hinzugefügt werden.Ausführliche Anweisungen dazu finden Sie unter Exemplarische Vorgehensweise: Lokalisieren von Windows Forms.

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 dann auf Anwendungsdateien.

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

    Der Name einer Satellitenassembly hat folgendes Format: ISO-Code\Anwendungsname.resources.dll. Dabei entspricht ISO-Code einem Sprachbezeichner im Format RFC 1766.

  5. Klicken Sie in der Liste Downloadgruppe für jeden Sprachbezeichner auf Neu.Wenn Sie zur Eingabe eines Downloadgruppennamens aufgefordert werden, geben Sie den Sprachbezeichner ein.Für eine japanische Satellitenassembly würden Sie z. B. den Downloadgruppennamen ja-JP angeben.

  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 im Projektmappen-Explorer nicht angezeigt wird, wählen Sie Ihr 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 am unteren Rand der Registerkarte auf Anwendungsereignisse anzeigen.

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

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Fügen Sie der MyApplication-Klasse 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, durch die CurrentUICulture auf einen bestimmten Wert festgelegt wird, da Clientcomputer standardmäßig auf den richtigen Wert festgelegt sind.Wenn z. B. Ihre Anwendung auf einem japanischen Clientcomputer ausgeführt wird, ist CurrentUICulture standardmäßig ja-JP.Das programmgesteuerte Festlegen der Kultur bietet eine gute Möglichkeit, die Satellitenassemblys zu testen, bevor Sie die Anwendung bereitstellen.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Herunterladen von Satellitenassemblys bei Bedarf mit der API für die ClickOnce-Bereitstellung

Konzepte

Lokalisieren von ClickOnce-Anwendungen