Formato de archivo de ensamblado .NET.NET assembly file format

.NET define un formato de archivo binario ensamblado que se usa para describir por completo y contener programas de .NET..NET defines a binary file format, assembly, that is used to fully describe and contain .NET programs. Los ensamblados se usan para los programas, así como para las bibliotecas dependientes.Assemblies are used for the programs themselves as well as any dependent libraries. Un programa de .NET se puede ejecutar como uno de varios ensamblados, no se necesitan otros artefactos, además de la implementación de .NET adecuada.A .NET program can be executed as one or more assemblies, with no other required artifacts, beyond the appropriate .NET implementation. Las dependencias nativas, incluidas las API del sistema operativo, constituyen un asunto independiente y no se incluyen en el formato de ensamblado. NET, aunque a veces se describen con este formato (por ejemplo, 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).

Cada componente de CLI incluye los metadatos para las declaraciones, implementaciones y referencias específicas a ese componente.Each CLI component carries the metadata for declarations, implementations, and references specific to that component. Por tanto, los metadatos específicos del componente se conocen como metadatos del componente y se dice que el componente resultante es autodescriptivo (de ECMA 335 I.9.1, Componentes y ensamblados).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.

El formato se especifica y estandariza por completo como ECMA 335.The format is fully specified and standardized as ECMA 335. Todos los compiladores y tiempos de ejecución de .NET usan este formato.All .NET compilers and runtimes use this format. La presencia de un formato binario documentado y actualizado con poca frecuencia ha sido una ventaja importante (posiblemente un requisito) para la interoperabilidad.The presence of a documented and infrequently updated binary format has been a major benefit (arguably a requirement) for interoperability. El formato se ha actualizado por última vez de forma significativa en 2005 (.NET 2.0) para dar cabida a la arquitectura del procesador y genéricos.The format was last updated in a substantive way in 2005 (.NET 2.0) to accommodate generics and processor architecture.

El formato es independiente de la CPU y del sistema operativo.The format is CPU- and OS-agnostic. Se ha usado como parte de las implementaciones de .NET que se dirigen a muchos chips y CPU.It has been used as part of .NET implementations that target many chips and CPUs. Aunque el propio formato tiene legado de Windows, se puede implementar en cualquier sistema operativo.While the format itself has Windows heritage, it is implementable on any operating system. Posiblemente, la opción más importante para la interoperabilidad del sistema operativo es que la mayoría de los valores se almacenan en formato little-endian.Its arguably most significant choice for OS interoperability is that most values are stored in little-endian format. No tiene una afinidad específica con el tamaño del puntero de equipo (por ejemplo, 32 bits, 64 bits).It doesn’t have a specific affinity to machine pointer size (for example, 32-bit, 64-bit).

El formato de ensamblado .NET también es muy descriptivo sobre la estructura de un programa o biblioteca determinados.The .NET assembly format is also very descriptive about the structure of a given program or library. Describe los componentes internos de un ensamblado, específicamente: referencias a ensamblados, tipos definidos y su estructura interna.It describes the internal components of an assembly, specifically assembly references and types defined and their internal structure. Las herramientas o API pueden leer y procesar esta información para representarla o para tomar decisiones de programación.Tools or APIs can read and process this information for display or to make programmatic decisions.

FormatoFormat

El formato binario de .NET se basa en el formato de archivo PE de Windows.The .NET binary format is based on the Windows PE file format. De hecho, las bibliotecas de clases de .NET son compatibles con Windows PE y, a primera vista, parecen ser bibliotecas de vínculos dinámicos (DLL) o aplicaciones ejecutables (EXE) de 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). Se trata de una característica muy útil en Windows, donde pueden hacerse pasar por archivos binarios ejecutables nativos y recibir el mismo tratamiento (por ejemplo, carga del sistema operativo, herramientas de 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).

Encabezados de ensamblado

Encabezados de ensamblado de ECMA 335 II.25.1, Estructura del formato de archivo en tiempo de ejecución.Assembly Headers from ECMA 335 II.25.1, Structure of the runtime file format.

Procesamiento de los ensambladosProcess the assemblies

Se pueden escribir herramientas o API para procesar ensamblados.It is possible to write tools or APIs to process assemblies. La información de ensamblado permite tomar decisiones mediante programación en tiempo de ejecución, volver a escribir ensamblados, proporcionar la API IntelliSense en un editor y generar documentación.Assembly information enables making programmatic decisions at run time, re-writing assemblies, providing API IntelliSense in an editor and generating documentation. System.Reflection, System.Reflection.MetadataLoadContext y Mono.Cecil son buenos ejemplos de herramientas que se usan con frecuencia con este propósito.System.Reflection, System.Reflection.MetadataLoadContext, and Mono.Cecil are good examples of tools that are frequently used for this purpose.