Nomi degli assembly

Il nome di un assembly viene archiviato nei metadati e ha un effetto significativo sull'ambito dell'assembly e sull'uso dell'assembly da parte di un'applicazione. Un assembly con nome sicuro dispone di un nome completo che include il nome dell'assembly, le impostazioni cultura, la chiave pubblica, il numero di versione e, facoltativamente, l'architettura del processore. Utilizzare la FullName proprietà per ottenere il nome completo, spesso indicato come nome visualizzato, per gli assembly caricati.

Il runtime usa le informazioni sul nome per individuare l'assembly e distinguerlo da altri assembly con lo stesso nome. Ad esempio un assembly con il nome sicuro myTypes può avere il seguente nome completo:

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil

In questo esempio, il nome completo indica che l' myTypes assembly ha un nome sicuro con un token di chiave pubblica, ha il valore delle impostazioni cultura per Stati Uniti inglese e ha un numero di versione di 1.0.1234.0. L'architettura del processore è msil , il che significa che verrà compilato JIT (just-in-Time) in codice a 32 bit o codice a 64 bit a seconda del sistema operativo e del processore.

Suggerimento

Le ProcessorArchitecture informazioni consentono versioni specifiche del processore di assembly. È possibile creare versioni di un assembly la cui identità differisce solo per l'architettura del processore, ad esempio versioni specifiche per processori a 32 bit o a 64 bit. L'architettura del processore non è obbligatoria per i nomi sicuri. Per altre informazioni, vedere AssemblyName.ProcessorArchitecture.

Il codice che richiede i tipi in un assembly deve usare un nome dell'assembly completo. Questa caratteristica è detta associazione completa. L'associazione parziale, che specifica solo un nome di assembly, non è consentita quando si fa riferimento agli assembly in .NET Framework.

Tutti i riferimenti ad assembly che costituiscono .NET Framework devono contenere anche il nome completo dell'assembly. Ad esempio, un riferimento all'assembly System. Data .NET Framework per la versione 1,0 include:

System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

La versione corrisponde al numero di versione di tutti gli assembly .NET Framework forniti con .NET Framework versione 1,0. Per gli assembly .NET Framework il valore delle impostazioni cultura è sempre neutro e la chiave pubblica è uguale a quella visualizzata nell'esempio precedente.

Ad esempio per aggiungere un riferimento assembly a un file di configurazione per configurare un listener di traccia è necessario includere il nome dell'assembly completo per l'assembly .NET Framework di sistema:

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />

Nota

Il runtime non distingue tra maiuscole e minuscole durante l'associazione a un assembly, ma conserva le maiuscole o le maiuscole usate nel nome dell'assembly. Vari strumenti di Windows SDK rilevano la differenza tra maiuscole e minuscole nei nomi degli assembly. Per risultati ottimali è consigliabile gestire i nomi degli assembly includendo la distinzione tra maiuscole e minuscole.

Assegnare un nome ai componenti dell'applicazione

Quando determina l'identità di un assembly il runtime non considera il nome file. L'identità dell'assembly, costituita da nome, versione, impostazioni cultura e nome sicuro dell'assembly, deve risultare chiara per il runtime.

Se, ad esempio, si dispone di un assembly denominato myAssembly.exe che fa riferimento a un assembly denominato myAssembly.dll, l'associazione viene eseguita correttamente se si esegue myAssembly.exe. Tuttavia, se un'altra applicazione viene eseguita myAssembly.exe usando il metodo AppDomain.ExecuteAssembly , il runtime determina che myAssembly è già caricato quando myAssembly.exe richiede l'associazione a myAssembly . In questo caso, myAssembly.dll non viene mai caricato. Poiché myAssembly.exe non contiene il tipo richiesto, TypeLoadException viene generato un oggetto.

Per evitare questo problema assicurarsi che gli assembly che costituiscono l'applicazione non abbiano lo stesso nome oppure posizionare gli assembly con lo stesso nome in directory diverse.

Nota

In .NET Framework, se si inserisce un assembly con nome sicuro nel Global Assembly Cache, il nome file dell'assembly deve corrispondere al nome dell'assembly, escluso l'estensione del nome file, ad esempio . exe o . dll. Se, ad esempio, il nome file di un assembly è myAssembly.dll, il nome dell'assembly deve essere myAssembly . Gli assembly privati distribuiti solo nella directory radice dell'applicazione possono avere un nome dell'assembly diverso dal nome file.

Vedere anche