Dela via


Genomgång: Ladda ned satellitsammansättningar på begäran med ClickOnce-distributions-API:et med hjälp av designern

Windows Forms-program kan konfigureras för flera kulturer med hjälp av satellitsammansättningar. En satellitsammansättning är en sammansättning som innehåller programresurser för en annan kultur än programmets standardkultur.

Som beskrivs i Localizing ClickOnce Applications (Lokalisera ClickOnce-program) kan du inkludera flera satellitsammansättningar för flera kulturer i samma ClickOnce-distribution. Som standard laddar ClickOnce ned alla satellitsammansättningar i distributionen till klientdatorn, även om en enda klient förmodligen bara kräver en satellitsammansättning.

Den här genomgången visar hur du markerar dina satellitsammansättningar som valfria och hämtar endast den sammansättning som en klientdator behöver för sina aktuella kulturinställningar.

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

I testsyfte anger följande kodexempel programmatiskt kulturen till ja-JP. Mer information om hur du justerar koden för en produktionsmiljö finns i avsnittet Nästa steg senare i det här avsnittet.

Så här markerar du satellitsammansättningar som valfria

  1. Skapa ditt projekt. Detta genererar satellitsammansättningar för alla kulturer som du lokaliserar till.

  2. Högerklicka på projektnamnet i Solution Explorer och klicka på Egenskaper.

  3. Klicka på fliken Publicera och klicka sedan på Programfiler.

  4. Markera kryssrutan Visa alla filer för att visa satellitsammansättningar. Som standard inkluderas alla satellitsammansättningar i distributionen och visas i den här dialogrutan.

    En satellitsammansättning har ett namn i formatet <isoCode>\ApplicationName.resources.dll, där <isoCode> är en språkidentifierare i RFC 1766-format.

  5. Klicka på Nytt i listan Ladda ned grupp för varje språkidentifierare. När du uppmanas att ange ett namn på en nedladdningsgrupp anger du språkidentifieraren. För en japansk satellitsammansättning anger du till exempel namnet ja-JPpå nedladdningsgruppen .

  6. Stäng dialogrutan Programfiler .

Ladda ned satellitsammansättningar på begäran i C#

  1. Öppna filen Program.cs . Om du inte ser den här filen i Solution Explorer väljer du projektet och klickar på Visa alla filerProjekt-menyn.

  2. Använd följande kod för att ladda ned lämplig satellitsammansättning och starta programmet.

    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.
                        }
                    }
                }
            }
    
        }
    }
    

Ladda ned satellitsammansättningar på begäran i Visual Basic

  1. I fönstret Egenskaper för programmet klickar du på fliken Program .

  2. Längst ned på fliken klickar du på Visa programhändelser.

  3. Lägg till följande importer i början av ApplicationEvents.VB-filen .

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Lägg till följande kod i MyApplication klassen.

    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ästa steg

I en produktionsmiljö måste du förmodligen ta bort raden i kodexemplen som anger CurrentUICulture ett visst värde, eftersom klientdatorerna har rätt värde inställt som standard. När programmet till exempel CurrentUICulture körs på en japansk klientdator blir ja-JP det som standard. Att ställa in den programmatiskt är ett bra sätt att testa dina satellitsammansättningar innan du distribuerar programmet.