Condividi tramite


Procedura dettagliata: Scaricare assembly satellite su richiesta con l'API di distribuzione ClickOnce usando la finestra di progettazione

Le applicazioni Windows Form possono essere configurate per più impostazioni cultura con l'uso di assembly satellite. Un assembly satellite è un assembly in cui sono contenute risorse dell'applicazione per impostazioni cultura diverse da quelle predefinite dell'applicazione.

Come descritto in Localizzazione di applicazioni ClickOnce, è possibile includere più assembly satellite per più impostazioni cultura all'interno della stessa distribuzione ClickOnce. Per impostazione predefinita, ClickOnce scaricherà tutti gli assembly satellite nella distribuzione nel computer client, anche se un singolo client richiederà probabilmente un solo assembly satellite.

Questa procedura dettagliata descrive come contrassegnare gli assembly satellite come facoltativi e scaricare solo l'assembly di cui un computer client ha bisogno per le impostazioni cultura correnti.

Nota

La ApplicationDeployment classe e le API nello System.Deployment.Application spazio dei nomi non sono supportate in .NET Core e .NET 5 e versioni successive. In .NET 7 è supportato un nuovo metodo di accesso alle proprietà di distribuzione dell'applicazione. Per altre informazioni, vedere Accedere alle proprietà di distribuzione ClickOnce in .NET. .NET 7 non supporta l'equivalente dei metodi ApplicationDeployment.

Nota

Ai fini dell'esecuzione del test, nei seguenti esempi di codice viene specificato ja-JP a livello di codice per le impostazioni cultura. Per informazioni su come modificare il codice per un ambiente di produzione, vedere la sezione "Passaggi successivi" più avanti in questo argomento.

Per contrassegnare gli assembly satellite come facoltativi

  1. Crea il progetto. In questo modo verranno generati gli assembly satellite per tutte le impostazioni cultura in cui si sta eseguendo la localizzazione.

  2. Fare clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzioni, quindi scegliere Proprietà.

  3. Fare clic sulla scheda Pubblica, quindi su File applicazione.

  4. Selezionare la casella di controllo Mostra tutti i file per visualizzare gli assembly satellite. Per impostazione predefinita, tutti gli assembly satellite verranno inclusi nella distribuzione e saranno visibili in questa finestra di dialogo.

    Un assembly satellite avrà un nome nel formato <isoCode>\ApplicationName.resources.dll, dove <isoCode> è un identificatore di lingua in formato RFC 1766.

  5. Scegliere Nuovo nell'elenco Gruppo di download per ogni identificatore del linguaggio. Quando viene richiesto di specificare un nome per il gruppo di download, immettere l'identificatore del linguaggio. Ad esempio, per un assembly satellite giapponese, è necessario specificare il nome ja-JPdel gruppo di download .

  6. Chiudere la finestra di dialogo File applicazione.

Per scaricare assembly satellite su richiesta in C#

  1. Aprire il file Program.cs. Se questo file non è visualizzato in Esplora soluzioni, selezionare il progetto e scegliere Mostra tutti i file dal menu Progetto.

  2. Usare il codice seguente per scaricare l'assembly satellite appropriato e avviare l'applicazione.

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

Per scaricare assembly satellite su richiesta in Visual Basic

  1. Fare clic sulla scheda Applicazione nella finestra Proprietà dell'applicazione.

  2. Nella parte inferiore della pagina della scheda, scegliere Visualizza eventi di applicazioni.

  3. Nella parte iniziale del file ApplicationEvents.VB, aggiungere i seguenti riferimenti importati.

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Aggiungere il codice seguente alla classe MyApplication .

    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
    

Passaggi successivi

In un ambiente di produzione sarà probabilmente necessario rimuovere la riga degli esempi di codice usata per impostare la proprietà CurrentUICulture su un valore specifico, perché il valore predefinito per i computer client è quello corretto. Quando l'applicazione è in esecuzione su un computer client giapponese, ad esempio, la proprietà predefinita CurrentUICulture sarà ja-JP . L'impostazione di tale proprietà a livello di codice è un buon metodo per procedere alla verifica degli assembly satellite prima di distribuire l'applicazione.