Share via


Procedura dettagliata: Scaricare assembly satellite su richiesta con l'API di distribuzione ClickOnce

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 Localizzare le 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. La procedura seguente usa gli strumenti disponibili in Windows Software Development Kit (SDK). È anche possibile eseguire questa attività in Visual Studio. Vedere anche Procedura dettagliata: Scaricare assembly satellite su richiesta con l'API di distribuzione ClickOnce usando progettazione o procedura dettagliata: Scaricare assembly satellite su richiesta con l'API di distribuzione ClickOnce usando progettazione.

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, l'esempio di codice seguente imposta a livello di codice le impostazioni cultura su ja-JP. Per informazioni su come modificare il codice per un ambiente di produzione, vedere la sezione "Passaggi successivi" più avanti in questo argomento.

Prerequisiti

In questo argomento si presuppone che siano note le procedure per aggiungere risorse localizzate all'applicazione con Visual Studio. Per istruzioni dettagliate, vedere Procedura dettagliata: Localizzare Windows Form.

Per scaricare gli assembly satellite su richiesta

  1. Aggiungere il codice seguente all'applicazione per consentire il download degli assembly satellite su richiesta.

    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 error to the user, as there may not be a satellite
                            // assembly if the user's culture and the application's default culture match.
                        }
                    }
                }
            }
    
        }
    }
    
  2. Generare assembly satellite per l'applicazione usando Resgen.exe (Generatore di file di risorse) o Visual Studio.

  3. Generare un manifesto dell'applicazione o aprire il manifesto dell'applicazione esistente usando MageUI.exe. Per altre informazioni su questo strumento, vedere MageUI.exe (Strumento per la generazione e la modifica di manifesti, client grafico).

  4. Scegliere la scheda File .

  5. Scegliere il pulsante con i puntini di sospensione (...) e selezionare la directory contenente tutti gli assembly e file dell'applicazione, inclusi gli assembly satellite generati con Resgen.exe. Un assembly satellite avrà un nome nel formato <isoCode>\ApplicationName.resources.dll, dove <isoCode> è un identificatore di lingua in formato RFC 1766.

  6. Fare clic su Popola per aggiungere i file alla distribuzione.

  7. Selezionare la casella di controllo Facoltativo per ogni assembly satellite.

  8. Impostare il campo di gruppo per ogni assembly satellite sul relativo identificatore di lingua ISO. Per un assembly satellite giapponese, ad esempio, specificare ja-JP. In questo modo il codice aggiunto nel passaggio 1 scaricherà l'assembly satellite appropriato, a seconda dell'impostazione della proprietà CurrentUICulture dell'utente.

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 valore a livello di codice è un buon metodo per procedere alla verifica degli assembly satellite prima di distribuire l'applicazione.