Condividi tramite


Conversione degli assembly esportati

Aggiornamento: novembre 2007

Lo strumento o l'API che esporta un assembly gestito in una libreria dei tipi deve prima convertirne il livello più esterno. Il processo converte ogni singolo assembly in una libreria dei tipi e stabilisce così una corrispondenza uno a uno. Non è possibile dividere un assembly in più librerie dei tipi. Un assembly produce sempre la stessa libreria, indipendentemente dai dettagli e dalle modalità della conversione.

Identità di assembly e librerie dei tipi

L'identità di un assembly consiste nei quattro elementi elencati nella tabella che segue.

Element

Descrizione

Nome

Stringa utilizzata per identificare l'assembly. Solitamente questa stringa corrisponde al nome del file di assembly senza l'estensione.

Chiave pubblica

Parte pubblica di una coppia di chiavi crittografiche (pubblica e privata).

Version

Stringa di quattro numeri che identifica la versione: principale, secondaria, build e revisione.

Stringa delle impostazioni cultura

Impostazioni internazionali supportate dall'assembly.

La combinazione di questi campi produce un nome sicuro che identifica l'assembly.

Parte di manifesto di assembly

.assembly Sample as "Sample"
{
    publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00   
                 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00   
                 B7 3C 60 FD 2D 6B E4 14 4E BD D1 B6 1A 09 FB F1   
                 23 FF A8 62 59 B3 86 0B 0A 73 10 98 51 E5 0E D6   
                 7E 10 2F A7 6E AF 1B E5 E8 F1 2E E6 9C F7 74 9A   
                 1A 9A 83 88 2C 70 C9 8B 52 AD 97 5C 23 52 D2 42   
                 D2 6C 64 14 E7 1D 1D 55 B4 F4 9C BB 86 7B 07 99   
                 E3 19 E8 E1 4A BC 7A 40 A6 A2 9D AD 96 9B E5 CA   
                 7C 10 5B 79 16 80 29 50 CD C3 63 D0 12 81 D0 18   
                 B4 AE DA EC CC ED 8E AF A4 08 14 05 C6 9C 7B C5)
  .ver 1:0:295:37445
  .locale = (65 00 6E 00 2D 00 55 00 53 00 00 00 )   // en-US
}

L'identità di una libreria dei tipi è invece costituita da tre elementi: un identificatore di libreria (LIBID, Library Identifier), la versione e un identificatore delle impostazioni internazionali (LCID, Local Identification). Né il file che contiene le informazioni sui tipi, né il nome descrittivo definito all'interno della libreria concorrono a formarne l'identità. È possibile individuare una libreria dei tipi nel Registro di sistema utilizzandone il LIBID, la versione e l'identificatore LCID.

Rappresentazione di libreria dei tipi

[ uuid(0D26FC72-7EB1-4565-AA75-DA5F177EFA66),
  lcid(0x0409), 
  version(2.1), 
  helpstring("Acme Widget Library")
] 
library Acme 
{
…
}; 

Identificatore di libreria (LIBID, Library Identifier)

Quando il processo di esportazione converte un assembly in una libreria dei tipi, preserva l'identità della libreria. Ogni assembly identificato in modo univoco diventa una libreria identificata in modo univoco. Per assicurare l'univocità del LIBID generato, nel processo di conversione vengono utilizzati il nome, la versione e la chiave pubblica dell'assembly.

In dettaglio, la combinazione offre le seguenti garanzie:

  • Una combinazione di nome, versione e chiave pubblica produce sempre lo stesso LIBID.

  • Da due assembly con combinazioni di nome, versione e chiave pubblica diverse non si ottengono mai LIBID uguali.

Per impostare il LIBID in modo esplicito, è possibile applicare GuidAttribute.

Numeri di versione e di build

Il processo di conversione trasferisce dall'assembly alla libreria dei tipi anche informazioni sulla versione, benché i numeri di versione contenuti nelle librerie dei tipi siano composti di sole due parti, mentre quelli degli assembly sono composti da quattro parti. I numeri di versione principale e secondaria dell'assembly vengono trasferiti alla libreria dei tipi. I numeri di build dell'assembly vengono scartati durante la conversione. Due assembly che differiscono solo per i rispettivi numeri di build producono pertanto sempre la stessa libreria dei tipi. Gli assembly che hanno 0 come numero di versione principale o secondario (0.0.X.X) producono una libreria dei tipi con numero di versione 1.0.

In generale, non ci sono garanzie sul contenuto di una libreria dei tipi generata da più versioni di un assembly. Non c'è garanzia che un tipo definito nella versione 1.0 di una determinata libreria sia anche presente in una seconda versione della stessa libreria.

Informazioni sulle impostazioni internazionali

La stringa dell'identificatore di impostazioni internazionali di un assembly (ad esempio, us-en) viene convertita in un LCID e memorizzata nel campo LCID della libreria dei tipi. Se l'assembly non contiene una stringa dell'identificatore di impostazioni internazionali, il processo di esportazione imposterà il valore di LCID su 0.

Conversione di punti in caratteri di sottolineatura

I nome degli assembly contengono frequentemente punti, non ammessi per i nomi delle librerie dei tipi. Il processo di esportazione converte i punti contenuti nel campo del nome dell'assembly in caratteri di sottolineatura.

Stringhe della Guida

Nel processo di esportazione l'attributo AssemblyDescriptionAttribute eventualmente applicato a un assembly in fase di progettazione, viene copiato nella helpstring o DocString associata alla libreria dei tipi. Non vengono impostati né il campo HelpFile, né il campo HelpContext della libreria dei tipi. Non viene impostato alcuno dei LIBFLAGS della libreria dei tipi.

Altri campi dell'assembly

Altri campi dell'assembly, quali Processor, OSInformation, CodeBase, Alias, AssemblyHash, Configuration e Flags, vengono ignorati durante la conversione.

Il processo di esportazione non imposta gli attributi della libreria dei tipi, quali hidden, restricted e control.

Vedere anche

Concetti

Conversione dei moduli esportati

Conversione dei tipi esportati

Conversione dei membri esportati

Conversione dei parametri esportati

Altre risorse

Riepilogo della conversione da assembly a libreria dei tipi