.NET-Assemblydateiformat.NET Assembly File Format

.NET definiert das Binärdateiformat „Assembly“, das .NET-Programme vollständig beschreiben und enthalten kann..NET defines a binary file format - "assembly" - that is used to fully-describe and contain .NET programs. Assemblys werden sowohl für die Programme selbst als auch alle abhängigen Bibliotheken verwendet.Assemblies are used for the programs themselves as well as any dependent libraries. Ein .NET-Programm kann in Form einer oder mehrerer Assemblys, ohne sonstige erforderliche Artefakte, außerhalb der entsprechenden .NET-Implementierung ausgeführt werden.A .NET program can be executed as one of more assemblies, with no other required artifacts, beyond the appropriate .NET implementation. Native Abhängigkeiten, einschließlich Betriebssystem-APIs, werden separat berücksichtigt und sind nicht im .NET-Assemblyformat enthalten, obwohl sie manchmal in diesem Format (z.B. WinRT) beschrieben werden.Native dependencies, including operating system APIs, are a separate concern and are not contained within the .NET assembly format, although are sometimes described with this format (for example, WinRT).

Jede CLI-Komponente enthält die Metadaten für Deklarationen, Implementierungen und Verweisen, die für diese Komponente spezifisch sind.Each CLI component carries the metadata for declarations, implementations, and references specific to that component. Darum werden die komponentenspezifischen Metadaten als Komponentenmetadaten und die resultierende Komponente als selbstbeschreibend bezeichnet – laut ECMA 335 I.9.1, „Components and assemblies“ (Komponenten und Assemblys).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.

Das Format ist als ECMA 335 vollständig spezifiziert und standardisiert.The format is fully specified and standardized as ECMA 335. Alle .NET-Compiler und -Runtimes verwenden dieses Format.All .NET compilers and runtimes use this format. Das Vorhandensein eines dokumentierten und unregelmäßig aktualisierten Binärformats ist ein großer Vorteil (wenn nicht gar eine Voraussetzung) für die Interoperabilität gewesen.The presence of a documented and infrequently updated binary format has been a major benefit (arguably a requirement) for interoperatibility. Das Format wurde zuletzt wesentlich 2005 (.NET 2.0) zur Aufnahme von Generika und Prozessorarchitektur aktualisiert.The format was last updated in a substantive way in 2005 (.NET 2.0) to accommodate generics and processor architecture.

Das Format ist agnostisch gegenüber CPU und Betriebssystem.The format is CPU- and OS-agnostic. Es wurde als Teil von .NET-Implementierungen verwendet, die auf viele Chips und CPUs abzielen.It has been used as part of .NET implementations that target many chips and CPUs. Trotz seines Windows-Erbes ist das Format unter jedem Betriebssystem implementierbar.While the format itself has Windows heritage, it is implementable on any operating system. Das wohl wichtigste Argument für die Betriebssysteminteroperabilität ist, dass die meisten Werte im Little-Endian-Format gespeichert werden.It’s arguably most significant choice for OS interoperability is that most values are stored in little-endian format. Es besteht keine bestimmte Affinität zur Zeigergröße des Computers (z.B. 32-Bit, 64-Bit).It doesn’t have a specific affinity to machine pointer size (for example, 32-bit, 64-bit).

Das .NET-Assemblyformat ist auch sehr aussagekräftig über die Struktur einer bestimmten Anwendung oder Bibliothek.The .NET assembly format is also very descriptive about the structure of a given program or library. Es beschreibt die internen Komponenten einer Assembly, speziell: Assemblyverweise und definierte Typen sowie deren interne Struktur.It describes the internal components of an assembly, specifically: assembly references and types defined and their internal structure. Tools oder APIs können diese Informationen für die Anzeige lesen und verarbeiten, oder um programmatische Entscheidungen zu treffen.Tools or APIs can read and process this information for display or to make programmatic decisions.

FormatFormat

Das .NET-Binärformat basiert auf dem Windows PE-Dateiformat.The .NET binary format is based on the Windows PE file format. In der Tat sind .NET-Klassenbibliotheken konforme Windows PE-Dateien und scheinen auf den ersten Blick Windows-Dynamic Link Librarys (DLLs) oder ausführbare Anwendungsdateien (EXE-Dateien) zu sein.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). Dies ist ein sehr nützliches Merkmal unter Windows, wo sie sich als native ausführbare Binärdateien tarnen können und weithin als solche behandelt werden (z.B. Laden durch das Betriebssystem, PE-Tools).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).

Assemblyheader

Assemblyheader aus ECMA 335 II.25.1, „Structure of the runtime file format“ (Struktur des Runtimedateiformats).Assembly Headers from ECMA 335 II.25.1, Structure of the runtime file format.

Verarbeiten der AssemblysProcessing the Assemblies

Es ist möglich, Tools oder APIs zum Verarbeiten von Assemblys zu schreiben.It is possible to write tools or APIs to process assemblies. Assemblyinformationen ermöglichen programmatische Entscheidungen zur Laufzeit, das Umschreiben von Assemblys, Bereitstellen von API-IntelliSense in einem Editor und Generieren von Dokumentation.Assembly information enables making programmatic decisions at runtime, re-writing assemblies, providing API IntelliSense in an editor and generating documentation. System.Reflection und Mono.Cecil sind gute Beispiele für Tools, die häufig für diesen Zweck verwendet werden.System.Reflection and Mono.Cecil are good examples of tools that are frequently used for this purpose.