Freigeben über


.NET-Assembly-Dateiformat

.NET definiert ein Binärdateiformat, eine Assembly, die zum vollständigen Beschreiben und Enthalten von .NET-Programmen verwendet wird. Assemblys werden für die Programme selbst sowie für abhängige Bibliotheken verwendet. Ein .NET-Programm kann als eine oder mehrere Assemblys ausgeführt werden, ohne andere erforderliche Artefakte, über die entsprechende .NET-Implementierung hinaus. Systemeigene Abhängigkeiten, einschließlich Betriebssystem-APIs, sind ein separates Problem und sind nicht im .NET-Assemblyformat enthalten, obwohl sie manchmal mit diesem Format (z. B. WinRT) beschrieben werden.

Jede CLI-Komponente enthält die Metadaten für Deklarationen, Implementierungen und Verweise, die für diese Komponente spezifisch sind. Daher werden die komponentenspezifischen Metadaten als Komponentenmetadaten bezeichnet; die resultierende Komponente wird als selbsterklärend bezeichnet – von ECMA 335 I.9.1, Komponenten und Assemblys.

Das Format wird vollständig angegeben und als ECMA 335 standardisiert. Alle .NET-Compiler und -Laufzeiten verwenden dieses Format. Das Vorhandensein eines dokumentierten und selten aktualisierten Binärformats ist ein großer Vorteil (wohl eine Anforderung) für die Interoperabilität. Das Format wurde in 2005 (.NET Framework 2.0) auf wesentliche Weise aktualisiert, um Generika und Prozessorarchitektur zu berücksichtigen.

Das Format ist CPU- und OS-agnostisch. Es wurde als Teil von .NET-Implementierungen verwendet, die auf viele Chips und CPUs abzielen. Während das Format selbst über das Windows-Erbe verfügt, ist es auf jedem Betriebssystem implementiert. Die wahrscheinlich wichtigste Wahl für die Interoperabilität des Betriebssystems besteht darin, dass die meisten Werte im little-endian-Format gespeichert werden. Es verfügt nicht über eine bestimmte Affinität zur Computerzeigergröße (z. B. 32-Bit, 64-Bit).

Das .NET-Assemblyformat ist auch sehr beschreibend über die Struktur eines bestimmten Programms oder einer bestimmten Bibliothek. Es beschreibt die internen Komponenten einer Assembly, insbesondere Assemblyverweise und definierte Typen sowie deren interne Struktur. Tools oder APIs können diese Informationen zur Anzeige lesen und verarbeiten oder programmgesteuerte Entscheidungen treffen.

Format

Das .NET-Binärformat basiert auf dem Windows PE-Dateiformat . Tatsächlich sind .NET-Klassenbibliotheken konforme Windows-PEs und scheinen auf den ersten Blick Windows Dynamic Link Libraries (DLLs) oder ausführbare Dateien der Anwendung (EXEs) zu sein. Dies ist eine sehr nützliches Eigenschaft von Windows, bei der sie als ausführbare Binärdateien erscheinen und ähnlich behandelt werden können (z. B. beim Laden des Betriebssystems, PE-Tools).

Assemblyheader

Assembly-Kopfzeilen aus ECMA 335 II.25.1: Struktur des Laufzeitdateiformats.

Baugruppen verarbeiten

Es ist möglich, Tools oder APIs zum Verarbeiten von Assemblys zu schreiben. Assemblyinformationen ermöglichen die Erstellung programmgesteuerter Entscheidungen zur Laufzeit, das Umschreiben von Assemblys, die Bereitstellung von API IntelliSense in einem Editor und das Generieren von Dokumentationen. System.Reflection, System.Reflection.MetadataLoadContextund Mono.Cecil sind gute Beispiele für Tools, die häufig zu diesem Zweck verwendet werden.