Formato dei file di assembly .NET.NET assembly file format

.NET definisce un formato di file binario, assembly, che viene usato per descrivere completamente e contenere i programmi .NET..NET defines a binary file format, assembly, that is used to fully describe and contain .NET programs. Gli assembly vengono usati per i programmi, nonché per tutte le librerie dipendenti.Assemblies are used for the programs themselves as well as any dependent libraries. Un programma .NET può essere eseguito come uno di più assembly, senza altri elementi necessari, oltre all'implementazione di .NET appropriata.A .NET program can be executed as one or more assemblies, with no other required artifacts, beyond the appropriate .NET implementation. Le dipendenze native, incluse le API del sistema operativo, rappresentano un problema distinto e non sono contenute nel formato di assembly .NET, anche se a volte vengono descritte con questo formato (ad esempio, WinRT).Native dependencies, including operating system APIs, are a separate concern and are not contained within the .NET assembly format, although they are sometimes described with this format (for example, WinRT).

Ogni componente CLI usa metadati specifici per dichiarazioni, implementazioni e riferimenti.Each CLI component carries the metadata for declarations, implementations, and references specific to that component. Quindi, i metadati specifici di un componente sono indicati come metadati del componente e il componente risultante viene definito come autodescrittivo, in base alla specifica ECMA 335 I.9.1 relativa a componenti e assembly.Therefore, the component-specific metadata is referred to as component metadata, and the resulting component is said to be self-describing – from ECMA 335 I.9.1, Components and assemblies.

Il formato è completamente specificato e standardizzato come ECMA 335.The format is fully specified and standardized as ECMA 335. Tutti i compilatori e runtime .NET usano questo formato.All .NET compilers and runtimes use this format. La presenza di un formato binario documentato e aggiornato di rado rappresenta uno dei principali vantaggi, probabilmente anche un requisito, per l'interoperabilità.The presence of a documented and infrequently updated binary format has been a major benefit (arguably a requirement) for interoperability. Il formato è stato aggiornato in modo sostanziale per l'ultima volta nel 2005 (.NET 2.0) per supportare generics e architettura del processore.The format was last updated in a substantive way in 2005 (.NET 2.0) to accommodate generics and processor architecture.

Il formato è indipendente dalla CPU e dal sistema operativo.The format is CPU- and OS-agnostic. È stato usato come parte delle implementazioni di .NET che usano molti chip e CPU.It has been used as part of .NET implementations that target many chips and CPUs. Anche se è basato su Windows, il formato può essere implementato in qualsiasi sistema operativo.While the format itself has Windows heritage, it is implementable on any operating system. Il motivo per cui è considerato la scelta migliore per l'interoperabilità del sistema operativo è il fatto che la maggior parte dei valori vengono archiviati in formato little endian.Its arguably most significant choice for OS interoperability is that most values are stored in little-endian format. Non presenta un'affinità specifica alle dimensioni del puntatore del computer, ad esempio 32 bit o 64 bit.It doesn’t have a specific affinity to machine pointer size (for example, 32-bit, 64-bit).

Il formato di assembly .NET offre anche una descrizione accurata della struttura di un programma o una libreria specifica.The .NET assembly format is also very descriptive about the structure of a given program or library. Vengono descritti i componenti interni di un assembly, in particolare i riferimenti e i tipi di assembly definiti e la relativa struttura interna.It describes the internal components of an assembly, specifically assembly references and types defined and their internal structure. Gli strumenti o le API sono in grado di leggere ed elaborare queste informazioni per la visualizzazione o per prendere decisioni a livello di codice.Tools or APIs can read and process this information for display or to make programmatic decisions.

FormatoFormat

Il formato binario .NET è basato sul formato di file PE di Windows.The .NET binary format is based on the Windows PE file format. Di fatto le librerie di classi .NET sono compatibili ai file PE di Windows e appaiono a prima vista come librerie a collegamento dinamico (DLL) o file eseguibili di applicazione (EXE) di Windows.In fact, .NET class libraries are conformant Windows PEs, and appear on first glance to be Windows dynamic link libraries (DLLs) or application executables (EXEs). Questa è una caratteristica molto utile in Windows, poiché le librerie possono essere mascherate da file binari eseguibili nativi e ricevere lo stesso trattamento (ad esempio, il carico del sistema operativo e gli strumenti PE).This is a very useful characteristic on Windows, where they can masquerade as native executable binaries and get some of the same treatment (for example, OS load, PE tools).

Intestazioni di assembly

Intestazioni di assembly da ECMA 335 II.25.1, struttura del formato di file di runtime.Assembly Headers from ECMA 335 II.25.1, Structure of the runtime file format.

Elaborare gli assemblyProcess the assemblies

È possibile scrivere strumenti o API per elaborare gli assembly.It is possible to write tools or APIs to process assemblies. Le informazioni sugli assembly consentono di prendere decisioni a livello di codice in fase di runtime, riscrivere gli assembly, inserire IntelliSense di API in un editor e generare documentazione.Assembly information enables making programmatic decisions at runtime, re-writing assemblies, providing API IntelliSense in an editor and generating documentation. System.Reflection, System.Reflection.MetadataLoadContext e Mono.Cecil sono esempi validi di strumenti usati di frequente per questo scopo.System.Reflection, System.Reflection.MetadataLoadContext, and Mono.Cecil are good examples of tools that are frequently used for this purpose.