Condividi tramite


Nomi degli assembly

Il nome di un assembly viene archiviato nei metadati e ha un impatto significativo sull'ambito dell'assembly e sull'uso da parte di un'applicazione. Un assembly con un nome forte ha un nome completo che include il nome, la cultura, la chiave pubblica, il numero di versione e, facoltativamente, l'architettura del processore. Utilizzare 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 nome forte denominato myTypes potrebbe avere il nome completamente qualificato seguente:

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 forte con un token di chiave pubblica, ha il valore delle impostazioni culturali per l'inglese degli Stati Uniti e ha un numero di versione 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 permettono versioni di assembly specifiche per processore. È possibile creare versioni di un assembly la cui identità è diversa solo dall'architettura del processore, ad esempio versioni specifiche del processore a 32 bit e a 64 bit. L'architettura del processore non è necessaria per i nomi forti. Per altre informazioni, vedere AssemblyName.ProcessorArchitecture.

Il codice che richiede tipi in un assembly deve usare un nome completamente qualificato dell'assembly. Questa è chiamata associazione completamente qualificata. L'associazione parziale, che specifica solo un nome di assembly, non è consentita quando si fa 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 cultura è sempre neutro e la chiave pubblica è identica a quella illustrata nell'esempio precedente.

Ad esempio, per aggiungere un riferimento all'assembly in un file di configurazione per configurare un listener di traccia, dovresti includere il nome completo dell'assembly del sistema .NET Framework:

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

Annotazioni

Il runtime considera i nomi degli assembly senza distinzione tra maiuscole e minuscole quando si esegue l'associazione a un assembly, ma mantiene qualsiasi caso venga usato in un nome di assembly. Diversi strumenti nel Windows SDK gestiscono i nomi di assembly in modo sensibile alle maiuscole. Per ottenere risultati ottimali, gestire i nomi degli assembly come se fossero case-sensitive.

Assegnare un nome ai componenti dell'applicazione

Il runtime non considera il nome del file quando si determina l'identità di un assembly. L'identità dell'assembly, costituita dal nome dell'assembly, dalla versione, dalla cultura e dal nome sicuro, deve essere 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 viene eseguita 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 richiede il collegamento 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 di assembly o assicurarsi di posizionare gli assembly con lo stesso nome in directory diverse.

Annotazioni

In .NET Framework, se si inserisce un assembly con nome sicuro nella Global Assembly Cache, il nome file dell'assembly deve corrispondere al nome dell'assembly, senza includere 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 dell'applicazione radice possono avere un nome di assembly diverso dal nome file.

Vedere anche