Share via


Creazione di assembly satellite

Il modello hub e spoke descritto nella sezione Creazione del package e distribuzione delle risorse rappresenta l'implementazione di progettazione consigliata per lo sviluppo di applicazioni con risorse.

Il modello hub e spoke richiede che le risorse vengano inserite in percorsi specifici, in modo da poter essere facilmente individuate e utilizzate. Se le risorse non vengono compilate e denominate correttamente o se non vengono inserite nei percorsi corretti, Common Language Runtime non potrà individuarle. Di conseguenza, il runtime utilizzerà il set di risorse predefinito. Per ulteriori informazioni sui nomi di risorse, vedere Classe CultureInfo oppure Creazione del package e distribuzione delle risorse.

Compilazione di assembly satellite

Per compilare i file RESOURCES in assembly satellite, utilizzare Assembly Linker (Al.exe). Al.exe crea un assembly dai file RESOURCES specificati. Per definizione, gli assembly satellite contengono solo risorse. Essi non possono contenere codice eseguibile.

Il comando Al.exe seguente crea un assembly satellite per l'applicazione MyApp dal file strings.de.resources.

al /t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll

Anche il comando Al.exe seguente crea un assembly satellite per l'applicazione MyApp dal file strings.de.resources. L'opzione /template stabilisce che l'assembly satellite erediti i metadati dell'assembly dall'assembly padre MyApp.dll.

al /t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll
/template:MyApp.dll

Nella tabella che segue vengono illustrate in modo più dettagliato le opzioni di Al.exe utilizzate negli esempi.

Opzione Descrizione

/t:lib

L'opzione /t specifica che l'assembly satellite viene compilato in un file di libreria (DLL). Un assembly satellite non può essere eseguito perché non contiene codice e non è l'assembly principale di un'applicazione. È pertanto necessario salvare gli assembly satellite come DLL.

/embed:strings.de.resources

L'opzione /embed specifica il nome del file di origine da utilizzare quando Al.exe compila l'assembly. È possibile incorporare in un assembly satellite più file RESOURCES. Tuttavia, se si segue il modello hub e spoke, è necessario compilare un assembly satellite per ciascuna lingua. È comunque possibile creare file RESOURCES separati per stringhe e oggetti.

/culture:de

L'opzione /culture specifica la lingua della risorsa da compilare. Il runtime utilizza queste informazioni quando cerca le risorse per una lingua specificata. Se si omette questa opzione, Al.exe compila la risorsa, ma il runtime non riesce a trovarla quando un utente la richiede.

/out:MyApp.resources.dll

L'opzione /out specifica il nome del file di output. Il nome deve seguire la denominazione standard nomeBase.resources.estensione, dove nomeBase è il nome dell'assembly principale e estensione è un'estensione valida, ad esempio DLL. Si noti che il runtime non è in grado di determinare la lingua di un assembly satellite in base al nome del relativo file di output. Pertanto, è importante specificare una lingua con l'opzione /culture sopra descritta.

/template: nomefile

L'opzione /template specifica un assembly dal quale ereditare tutti i metadati di assembly, ad eccezione del campo lingua. L'assembly da cui l'assembly satellite eredita deve avere un nome sicuro.

Per un elenco completo delle opzioni disponibili con Al.exe, vedere Assembly Linker (Al.exe).

Compilazione degli assembly satellite con nomi sicuri

Se si desidera installare assembly satellite nella Global Assembly Cache, è necessario che siano caratterizzati da nomi sicuri. Gli assembly con nomi sicuri sono firmati con una coppia di chiavi pubblica/privata valida. Per ulteriori informazioni sui nomi sicuri, vedere Assembly con nome sicuro.

Quando si sviluppa un'applicazione, è probabile che non si avrà accesso alla coppia di chiavi pubblica/privata finale. Per installare un assembly satellite nella Global Assembly Cache ed essere sicuri che funzioni correttamente, è possibile utilizzare una tecnica denominata firma posticipata. Quando si posticipa la firma di un assembly, durante la generazione viene riservato nel file lo spazio per la firma con nome sicuro. La firma viene posticipata a quando sarà disponibile la coppia di chiavi pubblica/privata finale.

Recupero della chiave pubblica

Per posticipare la firma di un assembly, è necessario avere accesso alla chiave pubblica. È possibile ottenere la chiave pubblica reale dall'organizzazione della propria azienda che eventualmente provvederà ad apporre la firma. In alternativa, è possibile creare una chiave pubblica utilizzando lo strumento Nome sicuro (Sn.exe).

Il comando Sn.exe seguente crea una coppia di chiavi pubblica/privata di prova e la salva nel file TestKeyPair.snk. L'opzione –k indica al comando Sn.exe di creare una nuova coppia di chiavi e la salva nel file specificato.

sn –k TestKeyPair.snk 

È possibile estrarre la chiave pubblica dal file contenente la coppia di chiavi di prova. Il comando seguente estrae la chiave pubblica da TestKeyPair.snk e la salva in PublicKey.snk.

sn –p TestKeyPair.snk PublicKey.snk

Ritardo della firma di un assembly

Una volta ottenuta o creata la chiave pubblica, utilizzare Assembly Linker (Al.exe) per compilare l'assembly con il posticipo della firma.

Il comando Al.exe riportato di seguito crea un assembly satellite con nome sicuro per l'applicazione MyApp dal file strings.ja.resources.

al /t:lib /embed:strings.ja.resources /culture:ja /out:MyApp.resources.dll /delay+ /keyfile:PublicKey.snk

L'opzione /delay+ specifica di posticipare la firma dell'assembly. L'opzione /keyfile: specifica il nome del file di chiavi contenente la chiave pubblica da utilizzare per posticipare la firma dell'assembly.

Per ulteriori informazioni sulla firma posticipata, vedere Firma posticipata di un assembly.

Gli assembly con nomi sicuri contengono le informazioni sulla versione utilizzate dal runtime per determinare quale assembly impiegare per soddisfare una richiesta di associazione. Per ulteriori informazioni su questo argomento, vedere Controllo delle versioni degli assembly.

Nuova firma di un assembly

Un assembly satellite con firma posticipata dovrà essere nuovamente firmato con una coppia di chiavi reale. È possibile compiere questa operazione utilizzando Sn.exe.

Il comando Sn.exe seguente firma MyApp.resources.dll con la coppia di chiavi archiviata nel file RealKeyPair.snk. L'opzione –R indica al comando Sn.exe di firmare nuovamente un assembly firmato in precedenza o con firma ritardata.

sn –R MyApp.resources.dll RealKeyPair.snk 

Installazione di un assembly satellite nella Global Assembly Cache

Durante il processo di fallback delle risorse la ricerca di risorse viene effettuata dapprima nella Global Assembly Cache. Per ulteriori informazioni, vedere la sezione "Processo di fallback delle risorse" nell'argomento Creazione del package e distribuzione delle risorse. È pertanto importante sapere come installare le risorse nella Global Assembly Cache. Un assembly satellite compilato con un nome sicuro è pronto per l'installazione nella Global Assembly Cache. È possibile installare assembly nella cache utilizzando lo Strumento Global Assembly Cache (Gacutil.exe).

Il comando Gacutil.exe riportato di seguito installa MyApp.resources.dll nella Global Assembly Cache.

gacutil /i:MyApp.resources.dll

L'opzione /i indica al comando Gacutil.exe di installare l'assembly specificato nella Global Assembly Cache. Il risultato di questo comando è l'inserimento di una voce nella cache, che consente di accedere agli elementi di questo file RESOURCES. Una volta installata nella cache, la risorsa specificata è disponibile per tutte le applicazioni progettate per utilizzarla.

Percorsi di directory per assembly satellite non installati nella Global Assembly Cache

Una volta compilati, gli assembly satellite avranno tutti lo stesso nome. Il runtime li distingue in base alla lingua specificata in fase di compilazione con l'opzione /culture di Al.exe e in base al percorso di directory di ciascuno di essi. È necessario collocare gli assembly satellite nei percorsi di directory corretti.

Nell'illustrazione riportata di seguito vengono mostrati i requisiti del percorso e una struttura di directory di esempio per le applicazioni non installate nella Global Assembly Cache. Gli elementi con estensione TXT e RESOURCES non verranno forniti con l'applicazione finale. Si tratta di file di risorse intermedi utilizzati per creare gli assembly di risorse satellite finali. In questo esempio è possibile sostituire file RESX ai file TXT. I file RESX rappresentano l'unico tipo di file di risorse intermedio che può contenere oggetti.

Directory di assembly satellite

Assembly satellite

Nota

Se l'applicazione include risorse relative a lingue secondarie, inserire ciascuna lingua secondaria nella rispettiva directory. Non inserire le lingue secondarie in sottodirectory della directory della lingua principale.

Vedere anche

Riferimenti

Assembly Linker (Al.exe)
Strumento Nome sicuro (Sn.exe)
Strumento Global Assembly Cache (Gacutil.exe)

Concetti

Creazione del package e distribuzione delle risorse
Ritardo della firma di un assembly
Risorse nelle applicazioni