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 ha un nome completo che include il nome, le impostazioni cultura, la chiave pubblica, il numero di versione e, facoltativamente, l'architettura del processore dell'assembly. Usare la proprietà FullName per ottenere il nome completo, noto spesso 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'assembly myTypes
ha un nome sicuro con un token di chiave pubblica, il valore di impostazioni cultura corrispondente a Inglese (Stati Uniti) e il numero di versione 1.0.1234.0. L'architettura del processore è msil
. Ciò significa che l'assembly sarà compilato con modalità JIT (Just-In-Time) in codice a 32 bit o a 64 bit a seconda del sistema operativo e del processore.
Suggerimento
Le informazioni ProcessorArchitecture
consentono versioni specifiche del processore degli 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 ulteriori 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 il nome di un assembly non è consentita per il riferimento ad assembly in .NET Framework.
Tutti i riferimenti agli 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 includerà:
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 ha un assembly con nome myAssembly.exe che fa riferimento all'assembly myAssembly.dll, quando si esegue myAssembly.exe l'associazione viene eseguita correttamente. Se tuttavia un'altra applicazione esegue 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, si verifica un'eccezione TypeLoadException.
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
Se in .NET Framework si inserisce un assembly con nome sicuro nella Global Assembly Cache il nome file dell'assembly deve corrispondere al nome dell'assembly, esclusa 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.