Nomi degli assemblyAssembly Names

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.An assembly's name is stored in metadata and has a significant impact on the assembly's scope and use by an application. Un assembly con un nome sicuro dispone di un nome completo costituito da nome, impostazioni cultura, chiave pubblica e numero di versione dell'assembly.A strong-named assembly has a fully qualified name that includes the assembly's name, culture, public key, and version number. Questo nome è spesso detto nome visualizzato. Nel caso degli assembly caricati è possibile ottenere tale nome con la proprietà FullName.This is frequently referred to as the display name, and for loaded assemblies can be obtained by using the FullName property.

Il runtime usa queste informazioni per individuare l'assembly e distinguerlo da altri assembly con lo stesso nome.The runtime uses this information to locate the assembly and differentiate it from other assemblies with the same name. Ad esempio un assembly con il nome sicuro myTypes può avere il seguente nome completo:For example, a strong-named assembly called myTypes could have the following fully qualified name:

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

Nota

In .NET Framework versione 2.0 all'identità dell'assembly viene aggiunta l'architettura del processore, per il supporto di versioni di assembly specifiche per un determinato processore.Processor architecture is added to the assembly identity in the .NET Framework version 2.0, to allow processor-specific versions of assemblies. È 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.You can create versions of an assembly whose identity differs only by processor architecture, for example 32-bit and 64-bit processor-specific versions. L'architettura del processore non è obbligatoria per i nomi sicuri.Processor architecture is not required for strong names. Per altre informazioni, vedere AssemblyName.ProcessorArchitecture.For more information, see AssemblyName.ProcessorArchitecture.

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.In this example, the fully qualified name indicates that the myTypes assembly has a strong name with a public key token, has the culture value for US English, and has a version number of 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.Its processor architecture is "msil", which means that it will be just-in-time (JIT)-compiled to 32-bit code or 64-bit code depending on the operating system and processor.

Il codice che richiede i tipi in un assembly deve usare un nome dell'assembly completo.Code that requests types in an assembly must use a fully qualified assembly name. Questa caratteristica è detta associazione completa.This is called fully qualified binding. L'associazione parziale che specifica solo il nome di un assembly non è consentita per il riferimento ad assembly in .NET Framework.Partial binding, which specifies only an assembly name, is not permitted when referencing assemblies in the .NET Framework.

Tutti i riferimenti agli assembly che costituiscono .NET Framework devono contenere anche il nome dell'assembly completo.All assembly references to assemblies that make up the .NET Framework also must contain a fully qualified name of the assembly. Ad esempio il riferimento all'assembly System.Data .NET Framework per la versione 1.0 includerà:For example, to reference the System.Data .NET Framework assembly for version 1.0 would include:

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

Si noti che la versione corrisponde al numero di versione di tutti gli assembly .NET Framework forniti con .NET Framework versione 1.0.Note that the version corresponds to the version number of all .NET Framework assemblies that shipped with .NET Framework version 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.For .NET Framework assemblies, the culture value is always neutral, and the public key is the same as shown in the above example.

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:For example, to add an assembly reference in a configuration file to set up a trace listener, you would include the fully qualified name of the system .NET Framework assembly:

<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.The runtime treats assembly names as case-insensitive when binding to an assembly, but preserves whatever case is used in an assembly name. Vari strumenti di Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) rilevano la differenza tra maiuscole e minuscole nei nomi degli assembly.Several tools in the Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) handle assembly names as case-sensitive. Per risultati ottimali è consigliabile gestire i nomi degli assembly includendo la distinzione tra maiuscole e minuscole.For best results, manage assembly names as though they were case-sensitive.

Assegnazione di nomi ai componenti dell'applicazioneNaming Application Components

Quando determina l'identità di un assembly il runtime non considera il nome file.The runtime does not consider the file name when determining an assembly's identity. L'identità dell'assembly, costituita da nome, versione, impostazioni cultura e nome sicuro dell'assembly, deve risultare chiara per il runtime.The assembly identity, which consists of the assembly name, version, culture, and strong name, must be clear to the runtime.

Se ad esempio si dispone di un assembly con nome myAssembly.exe che fa riferimento all'assembly myAssembly.dll, quando si esegue myAssembly.exe l'associazione viene eseguita correttamente.For example, if you have an assembly called myAssembly.exe that references an assembly called myAssembly.dll, binding occurs correctly if you execute myAssembly.exe. Se tuttavia un'altra applicazione esegue myAssembly.exe usando il metodo AppDomain.ExecuteAssembly, quando myAssembly.exe richiede l'associazione a "myAssembly" il runtime determina che "myAssembly" è già caricato.However, if another application executes myAssembly.exe using the method AppDomain.ExecuteAssembly, the runtime determines that "myAssembly" is already loaded when myAssembly.exe requests binding to "myAssembly." In questo caso, myAssembly.dll non viene mai caricato.In this case, myAssembly.dll is never loaded. Dato che myAssembly.exe non contiene il tipo richiesto si verifica un'eccezione TypeLoadException.Because myAssembly.exe does not contain the requested type , a TypeLoadException occurs.

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.To avoid this problem, make sure the assemblies that make up your application do not have the same assembly name or place assemblies with the same name in different directories.

Nota

Se 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).If you put a strong-named assembly in the global assembly cache, the assembly's file name must match the assembly name (not including the file name extension, such as .exe or .dll). Ad esempio se il nome file di un assembly è myAssembly.dll, il nome dell'assembly deve essere myAssembly.For example, if the file name of an assembly is myAssembly.dll, the assembly name must be myAssembly. Gli assembly privati distribuiti solo nella directory radice dell'applicazione possono avere un nome dell'assembly diverso dal nome file.Private assemblies deployed only in the root application directory can have an assembly name that is different from the file name.

Vedere ancheSee Also

Procedura: Determinare il nome completo di un assemblyHow to: Determine an Assembly's Fully Qualified Name
Creazione degli assemblyCreating Assemblies
Assembly con nomi sicuriStrong-Named Assemblies
Global Assembly CacheGlobal Assembly Cache
Come il runtime individua gli assemblyHow the Runtime Locates Assemblies
Programmazione con gli assemblyProgramming with Assemblies