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, 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, noto spesso come nome visualizzato, per gli assembly caricati.

Il runtime usa le informazioni sul nome per individuare l'assembly e differenziarlo 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, ha il valore delle impostazioni cultura per Stati Uniti inglese e ha un numero di versione 1.0.1234.0. L'architettura del processore è msil, che significa che sarà jiT (Just-In-Time) compilata 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 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 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. Associazione parziale, che specifica solo un nome dell'assembly, non è consentita quando si fa riferimento agli 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 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.

Componenti dell'applicazione nome

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.

Ad esempio, se si dispone di un assembly denominato myAssembly.exe che fa riferimento a un assembly denominato myAssembly.dll, l'associazione si verifica correttamente se si esegue myAssembly.exe. Tuttavia, se un'altra applicazione esegue myAssembly.exe usando il metodo AppDomain.ExecuteAssembly, il runtime determina che myAssembly è già caricato quando myAssembly.exe l'associazione delle richieste a myAssembly. In questo caso, myAssembly.dll non viene mai caricato. Poiché myAssembly.exe non contiene il tipo richiesto, si verifica un oggetto 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

In .NET Framework, se si inserisce un assembly con nome sicuro nella global assembly cache, il nome del file dell'assembly deve corrispondere al nome dell'assembly, non includendo l'estensione del nome file, ad esempio .exe o .dll. Ad esempio, se 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.

Vedi anche