Procedura dettagliata: download di assembly satellite su richiesta con l'API della distribuzione ClickOnce tramite la finestra di progettazione
Le applicazioni Windows Form possono essere configurate per più impostazioni cultura tramite l'utilizzo 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 delle 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 probabilmente un singolo client richiederà un solo assembly satellite.
In questa procedura dettagliata viene descritto come contrassegnare gli assembly satellite come facoltativi e scaricare in un computer client solo l'assembly richiesto in base alle impostazioni cultura correnti.
[!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 adattare questo codice a un ambiente di produzione, vedere la sezione "Passaggi successivi" più avanti in questo argomento.
Prerequisiti
Le informazioni illustrate in questo argomento partono dal presupposto che si conosca come aggiungere risorse localizzate nell'applicazione utilizzando Visual Studio.Per istruzioni dettagliate, vedere Procedura dettagliata: localizzazione di Windows Form.
Per contrassegnare gli assembly satellite come facoltativi
Compilazione del progetto.In questo modo verranno generati gli assembly satellite per tutte le impostazioni cultura in cui si sta eseguendo la localizzazione.
Fare clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzioni, quindi scegliere Proprietà.
Fare clic sulla scheda Pubblica, quindi su File applicazione.
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.
I nomi degli assembly satellite sono strutturati come segue: CodiceIso\NomeApplicazione.resources.dll, dove CodiceIso è un'identificatore del linguaggio in formato RFC 1766.
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.Per un assembly satellite giapponese, ad esempio, specificare ja-JP.
Chiudere la finestra di dialogo File applicazione.
Per scaricare assembly satellite su richiesta in C#
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.
Utilizzare il seguente codice 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
Fare clic sulla scheda Applicazione nella finestra Proprietà dell'applicazione.
Nella parte inferiore della pagina della scheda, scegliere Visualizza eventi di applicazioni.
Nella parte iniziale del file ApplicationEvents.VB, aggiungere i seguenti riferimenti importati.
Imports System.Deployment.Application Imports System.Globalization Imports System.Threading
Aggiungere il seguente codice 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 utilizzata per impostare la proprietà CurrentUICulture su un valore specifico, poiché il valore predefinito per i computer client è quello corretto.Se l'applicazione viene eseguita ad esempio in un computer client giapponese, la proprietà CurrentUICulture sarà impostata su ja-JP per impostazione predefinita.L'impostazione di tale proprietà a livello di codice è un buon metodo per procedere alla verifica degli assembly satellite prima di distribuire l'applicazione.