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 ulteriori 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 ad assembly che costituiscono il .NET Framework devono contenere anche il nome completo dell'assembly.All assembly references to assemblies that make up the .NET Framework must also contain the fully qualified name of the assembly. Ad esempio, un riferimento all'assembly System. Data .NET Framework per la versione 1,0 include:For example, a reference to 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 SDK rilevano la differenza tra maiuscole e minuscole nei nomi degli assembly.Several tools in the Windows 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.

Assegnare un nome ai componenti dell'applicazioneName 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 denominato MyAssembly . exe che fa riferimento a un assembly denominato MyAssembly . dll, l'associazione viene eseguita correttamente se si esegue myAssembly. exe.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. Tuttavia, se un'altra applicazione esegue myAssembly. exe utilizzando il metodo AppDomain.ExecuteAssembly, il runtime determina che myAssembly è già caricato quando myAssembly. exe richiede l'associazione al myAssembly.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. Poiché myAssembly. exe non contiene il tipo richiesto, si verifica un 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

Nel .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.In the .NET Framework, 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. Se, ad esempio, 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