Assembly in .NETAssemblies in .NET

Gli assembly costituiscono le unità di base per la distribuzione, il controllo della versione, il riutilizzo, l'ambito di attivazione e le autorizzazioni di sicurezza per. Applicazioni basate su rete.Assemblies form the fundamental units of deployment, version control, reuse, activation scoping, and security permissions for .NET-based applications. Un assembly è una raccolta di tipi e risorse creati per essere usati insieme e per formare un'unità logica di funzionalità.An assembly is a collection of types and resources that are built to work together and form a logical unit of functionality. Gli assembly hanno la forma di file eseguibili (conestensione exe) o di libreria a collegamento dinamico (dll) e sono i blocchi predefiniti delle applicazioni .NET.Assemblies take the form of executable (.exe) or dynamic link library (.dll) files, and are the building blocks of .NET applications. Gli assembly forniscono al Common Language Runtime le informazioni necessarie per riconoscere le implementazioni dei tipi.They provide the common language runtime with the information it needs to be aware of type implementations.

In .NET Core e .NET Framework è possibile compilare un assembly da uno o più file di codice sorgente.In .NET Core and .NET Framework, you can build an assembly from one or more source code files. In .NET Framework gli assembly possono contenere uno o più moduli.In .NET Framework, assemblies can contain one or more modules. In questo modo è possibile pianificare progetti di grandi dimensioni in modo che più sviluppatori possano lavorare su moduli o file di codice sorgente distinti, combinati per creare un singolo assembly.This allows larger projects to be planned so that several developers can work on separate source code files or modules, which are combined to create a single assembly. Per altre informazioni sui moduli, vedere procedura: compilare un assemblysu più file.For more information about modules, see How to: Build a multifile assembly.

Di seguito sono riportate le proprietà degli assembly:Assemblies have the following properties:

  • Gli assembly vengono implementati come file con estensione exe o dll .Assemblies are implemented as .exe or .dll files.

  • Per le librerie destinate alla .NET Framework, è possibile condividere gli assembly tra le applicazioni inserendoli nella global assembly cache (GAC).For libraries that target the .NET Framework, you can share assemblies between applications by putting them in the global assembly cache (GAC). Prima di poterli includere nella GAC, è necessario assegnare nomi sicuri agli assembly.You must strong-name assemblies before you can include them in the GAC. Per ulteriori informazioni, vedere assembly con nome sicuro.For more information, see Strong-named assemblies.

  • Gli assembly vengono caricati in memoria solo se sono richiesti.Assemblies are only loaded into memory if they are required. Se non vengono usati, non vengono caricati.If they aren't used, they aren't loaded. Questo significa che gli assembly rappresentano un modo efficace per gestire le risorse nei progetti di maggiori dimensioni.This means that assemblies can be an efficient way to manage resources in larger projects.

  • È possibile ottenere informazioni su un assembly a livello di codice tramite reflection.You can programmatically obtain information about an assembly by using reflection. Per altre informazioni, vedere Reflection (C#) o Reflection (Visual Basic).For more information, see Reflection (C#) or Reflection (Visual Basic).

  • È possibile caricare un assembly solo per esaminarlo usando la classe MetadataLoadContext in .NET Core e i metodi Assembly.ReflectionOnlyLoad o Assembly.ReflectionOnlyLoadFrom in .NET Core e .NET Framework.You can load an assembly just to inspect it by using the MetadataLoadContext class in .NET Core and the Assembly.ReflectionOnlyLoad or Assembly.ReflectionOnlyLoadFrom methods in .NET Core and .NET Framework.

Assembly nel Common Language RuntimeAssemblies in the common language runtime

Gli assembly forniscono la Common Language Runtime con le informazioni necessarie per conoscere le implementazioni dei tipi.Assemblies provide the common language runtime with the information it needs to be aware of type implementations. Per il runtime, un tipo non esiste all'esterno del contesto di un assembly.To the runtime, a type does not exist outside the context of an assembly.

Un assembly definisce le seguenti informazioni:An assembly defines the following information:

  • Codice eseguito dal Common Language Runtime.Code that the common language runtime executes. Si noti che ogni assembly può avere un solo punto di ingresso: DllMain, WinMain o Main.Note that each assembly can have only one entry point: DllMain, WinMain, or Main.

  • Limite di sicurezza.Security boundary. Un assembly è l'unità presso cui sono richieste e concesse le autorizzazioni.An assembly is the unit at which permissions are requested and granted. Per ulteriori informazioni sui limiti di sicurezza negli assembly, vedere considerazioni sulla sicurezza degli assembly.For more information about security boundaries in assemblies, see Assembly security considerations.

  • Limite del tipo.Type boundary. L'identità di ogni tipo include il nome dell'assembly in cui risiede.Every type's identity includes the name of the assembly in which it resides. Un tipo con nome MyType caricato nell'ambito di un assembly è diverso da un tipo con nome MyType caricato nell'ambito di un altro assembly.A type called MyType that is loaded in the scope of one assembly is not the same as a type called MyType that is loaded in the scope of another assembly.

  • Limite dell'ambito di riferimento.Reference scope boundary. Il manifesto dell'assembly contiene metadati usati per risolvere i tipi e soddisfare le richieste di risorse.The assembly manifest has metadata that is used for resolving types and satisfying resource requests. Il manifesto specifica i tipi e le risorse da esporre all'esterno dell'assembly ed enumera altri assembly da cui dipende.The manifest specifies the types and resources to expose outside the assembly, and enumerates other assemblies on which it depends. Il codice MSIL (Microsoft Intermediate Language) in un file eseguibile portabile (PE) non verrà eseguito a meno che non disponga di un manifesto dell'assemblyassociato.Microsoft intermediate language (MSIL) code in a portable executable (PE) file won't be executed unless it has an associated assembly manifest.

  • Limite della versione.Version boundary. L'assembly è la più piccola unità di versione nella Common Language Runtime.The assembly is the smallest versionable unit in the common language runtime. Il controllo delle versioni di tutti i tipi e le risorse nello stesso assembly viene apposto come unità.All types and resources in the same assembly are versioned as a unit. Il manifesto dell'assembly descrive le dipendenze della versione specificate per gli assembly dipendenti.The assembly manifest describes the version dependencies you specify for any dependent assemblies. Per ulteriori informazioni sul controllo delle versioni, vedere controllo delle versioni degli assembly.For more information about versioning, see Assembly versioning.

  • Unità di distribuzione.Deployment unit. All'avvio di un'applicazione, devono essere presenti solo gli assembly chiamati inizialmente dall'applicazione.When an application starts, only the assemblies that the application initially calls must be present. Gli altri assembly, ad esempio gli assembly contenenti le risorse di localizzazione o le classi di utilità, possono essere recuperati su richiesta.Other assemblies, such as assemblies containing localization resources or utility classes, can be retrieved on demand. In questo modo le app possono essere semplici e sottili quando vengono scaricati per la prima volta.This allows apps to be simple and thin when first downloaded. Per ulteriori informazioni sulla distribuzione degli assembly, vedere deploy Applications.For more information about deploying assemblies, see Deploy applications.

  • Unità di esecuzione side-by-side.Side-by-side execution unit. Per ulteriori informazioni sull'esecuzione di più versioni di un assembly, vedere assembly ed esecuzione side-by-side.For more information about running multiple versions of an assembly, see Assemblies and side-by-side execution.

Creazione di un assemblyCreate an assembly

Gli assembly possono essere statici o dinamici.Assemblies can be static or dynamic. Gli assembly statici sono archiviati su disco in file eseguibili portabili.Static assemblies are stored on disk in portable executable (PE) files. Gli assembly statici possono includere interfacce, classi e risorse quali bitmap, file JPEG e altri file di risorse.Static assemblies can include interfaces, classes, and resources like bitmaps, JPEG files, and other resource files. È anche possibile creare assembly dinamici, eseguiti direttamente dalla memoria e non salvati su disco prima dell'esecuzione.You can also create dynamic assemblies, which are run directly from memory and aren't saved to disk before execution. È possibile salvare gli assembly dinamici su disco dopo l'esecuzione.You can save dynamic assemblies to disk after they have executed.

Esistono diversi modi per creare assembly.There are several ways to create assemblies. È possibile usare gli strumenti di sviluppo, ad esempio Visual Studio, che possono creare file con estensione dll o exe .You can use development tools, such as Visual Studio, that can create .dll or .exe files. È possibile usare gli strumenti nel Windows SDK per creare assembly con moduli da altri ambienti di sviluppo.You can use tools in the Windows SDK to create assemblies with modules from other development environments. Per creare assembly dinamici è anche possibile usare le API di Common Language Runtime come System.Reflection.Emit.You can also use common language runtime APIs, such as System.Reflection.Emit, to create dynamic assemblies.

Compila gli assembly in Visual Studio, creandoli con strumenti dell'interfaccia della riga di comando di .NET Core o compilando .NET Framework assembly con un compilatore da riga di comando.Compile assemblies by building them in Visual Studio, building them with .NET Core command-line interface tools, or building .NET Framework assemblies with a command-line compiler. Per ulteriori informazioni sulla compilazione di assembly mediante gli strumenti dell'interfaccia della riga di comando di .NET Core, vedere strumenti dell'interfaccia della riga di comando di .NET Core.For more information about building assemblies using .NET Core command-line interface tools, see .NET Core command-line interface tools. Per la compilazione di assembly con i compilatori della riga di comando, vedere compilazione da riga di comando con csc. exe per C#o compilazione dalla riga di comando per Visual Basic.For building assemblies with the command-line compilers, see Command-line build with csc.exe for C#, or Build from the command line for Visual Basic.

Nota

Per compilare un assembly in Visual Studio, scegliere Compiladal menu Compila .To build an assembly in Visual Studio, on the Build menu, select Build.

Manifesto dell'assemblyAssembly manifest

Ogni assembly dispone di un file manifesto dell'assembly .Every assembly has an assembly manifest file. Analogamente a un sommario, il manifesto dell'assembly contiene:Similar to a table of contents, the assembly manifest contains:

  • L'identità dell'assembly, ovvero il nome e la versione.The assembly's identity (its name and version).

  • Una tabella di file che descrive tutti gli altri file che costituiscono l'assembly, ad esempio gli altri assembly creati per il file con estensione exe o dll , i file bitmap o i file Leggimi.A file table describing all the other files that make up the assembly, such as other assemblies you created that your .exe or .dll file relies on, bitmap files, or Readme files.

  • Elenco di riferimenti ad assembly, ovvero un elenco di tutte le dipendenze esterne, ad esempio . dllo altri file.An assembly reference list, which is a list of all external dependencies, such as .dlls or other files. I riferimenti all'assembly contengono riferimenti a oggetti sia privati che globali.Assembly references contain references to both global and private objects. Gli oggetti globali sono disponibili per tutte le altre applicazioni.Global objects are available to all other applications. In .NET Core gli oggetti globali sono abbinati a un particolare runtime di .NET Core.In .NET Core, global objects are coupled with a particular .NET Core runtime. In .NET Framework gli oggetti globali si trovano nella Global Assembly Cache (GAC).In .NET Framework, global objects reside in the global assembly cache (GAC). System. io. dll è un esempio di assembly nella GAC.System.IO.dll is an example of an assembly in the GAC. Gli oggetti privati devono trovarsi in un livello di directory all'interno o al di sotto della directory in cui è installata l'app.Private objects must be in a directory level at or below the directory in which your app is installed.

Poiché gli assembly contengono informazioni sul contenuto, sul controllo delle versioni e sulle dipendenze, le applicazioni che le utilizzano non devono basarsi su origini esterne, ad esempio il registro di sistema nei sistemi Windows, per funzionare correttamente.Because assemblies contain information about content, versioning, and dependencies, the applications that use them needn't rely on external sources, such as the registry on Windows systems, to function properly. Gli assembly riducono i conflitti con estensione dll e rendono le applicazioni più affidabili e facili da distribuire.Assemblies reduce .dll conflicts and make your applications more reliable and easier to deploy. In molti casi, è possibile installare un'applicazione basata su .NET semplicemente copiandone i file nel computer di destinazione.In many cases, you can install a .NET-based application simply by copying its files to the target computer. Per altre informazioni, vedere manifesto dell'assembly.For more information, see Assembly manifest.

Aggiungere un riferimento a un assemblyAdd a reference to an assembly

Per usare un assembly in un'applicazione, è necessario aggiungervi un riferimento.To use an assembly in an application, you must add a reference to it. Quando si fa riferimento a un assembly, tutti i tipi accessibili, le proprietà, i metodi e gli altri membri dei relativi spazi dei nomi sono disponibili per l'applicazione come se il codice fosse parte del file di origine.Once an assembly is referenced, all the accessible types, properties, methods, and other members of its namespaces are available to your application as if their code were part of your source file.

Nota

Per la maggior parte degli assembly dalla libreria di classi .NET i riferimenti sono automatici.Most assemblies from the .NET Class Library are referenced automatically. Se non viene fatto automaticamente riferimento a un assembly di sistema, per .NET Core è possibile aggiungere un riferimento al pacchetto NuGet che contiene l'assembly.If a system assembly isn't automatically referenced, for .NET Core, you can add a reference to the NuGet package that contains the assembly. Usare Gestione pacchetti NuGet in Visual Studio o aggiungere un <PackageReference elemento > per l'assembly al progetto . csproj o . vbproj .Either use the NuGet Package Manager in Visual Studio, or add a <PackageReference> element for the assembly to the .csproj or .vbproj project. In .NET Framework, è possibile aggiungere un riferimento all'assembly usando la finestra di dialogo Aggiungi riferimento in Visual Studio oppure usando l'opzione della riga di comando -reference per i C# compilatori o Visual Basic .In .NET Framework, you can add a reference to the assembly by using the Add Reference dialog in Visual Studio, or by using the -reference command line option for the C# or Visual Basic compilers.

In C#è possibile utilizzare due versioni dello stesso assembly in una singola applicazione.In C#, you can use two versions of the same assembly in a single application. Per altre informazioni, vedere alias esterno.For more information, see extern alias.

TitoloTitle DescrizioneDescription
Contenuto dell'assemblyAssembly contents Elementi che costituiscono un assembly.Elements that make up an assembly.
Manifesto dell'assemblyAssembly manifest I dati nel manifesto dell'assembly e il modo in cui vengono archiviati negli assembly.Data in the assembly manifest, and how it is stored in assemblies.
Assembly Cache globaleGlobal assembly cache Modalità di archiviazione e di utilizzo degli assembly nella GAC.How the GAC stores and uses assemblies.
Assembly con nomi sicuriStrong-named assemblies Caratteristiche degli assembly con nome sicuro.Characteristics of strong-named assemblies.
Considerazioni sulla sicurezza degli assemblyAssembly security considerations Funzionamento della sicurezza con gli assembly.How security works with assemblies.
Controllo delle versioni degli assemblyAssembly versioning Panoramica dei criteri di controllo delle versioni .NET Framework.Overview of the .NET Framework versioning policy.
Posizionamento degli assemblyAssembly placement Posizione in cui individuare gli assembly.Where to locate assemblies.
Assembly e esecuzione side-by-sideAssemblies and side-by-side execution Usare più versioni del runtime o di un assembly simultaneamente.Use multiple versions of the runtime or an assembly simultaneously.
Creare assembly e metodi dinamiciEmit dynamic methods and assemblies Come creare assembly dinamici.How to create dynamic assemblies.
Come il runtime individua gli assemblyHow the runtime locates assemblies Il modo in cui il .NET Framework risolve i riferimenti ad assembly in fase di esecuzione.How the .NET Framework resolves assembly references at run time.

ReferenceReference

System.Reflection.Assembly

Vedere ancheSee also