Wenn Sie mit .NET programmieren, werden Sie früher oder später auf den Begriff ?Assembly? stossen. Was ist das eigentlich? Warum ist das so wichtig? Was und wie kann ich etwas damit machen? Welche Tools gibt es dafür? Diese und einige andere Fragen werden in dieser Artikelreihe beantwortet.
Was ist eine Assembly?
Eine Assembly ist der elementare Baustein einer .NET Framework-Anwendung. Eine Assembly ist die Einheit von Entwicklung, Versionierung und Sicherheit. Aber sie ist weit mehr als das. Assemblies verringern DLL-Konflikte, machen die Anwendungen zuverlässiger, erleichtern die Weitergabe und Wiederverwendung und dienen zur Abgrenzung der Gültigkeit von Typen (Scoping).
Assemblies sind ausführbare Dateien (.exe) oder Dynamic Link Library-Dateien (.dll). Allerdings haben sie mit den früheren .exe oder .dll-Dateien nicht mehr viel gemein, denn zusätzlich zu dem ausführbaren Code enthält sie auch eine Menge zusätzlicher Informationen über sich selbst und den enthaltenden Code. Deshalb werden Assemblies auch als selbstbeschreibende Anwendungen bzw. Bibliotheken bezeichnet. Die selbstbeschreibende Art der Assemblies hilft auch dabei, die Installation ohne Eingriffe durch Benutzer sowie die XCOPY-Weitergabe durchführen zu können. Sie benötigen keinerlei Einträge in die System-Registrierung (Registry).
Welche verschiedenen Arten von Assemblies gibt es?
Prinzipiell kann man Assemblies zunächst einmal in Anwendungen und Bibliotheken unterscheiden, je nach Endung .exe oder .dll. Darüberhinaus gibt es noch weitere Gruppierungen.
Wie unterscheiden sich statische und dynamische Assemblies?
Eine statische Assembly ist der Regelfall. Sie liegt nach der Kompilierung physikalisch auf dem Datenträger und besteht aus einem oder mehreren Code-Modulen und eventuell vorhandenen Ressource-Dateien. Zur Laufzeit wird sie selbst und alle referenzierten Assemblies und Ressourcen zum entsprechenden Zeitpunkt geladen.
Eine dynamische Assembly wird erst zur Laufzeit einer anderen .NET-Anwendung erzeugt. Sie wird normalerweise nicht auf der Festplatte gespeichert.
Wie unterscheiden sich private Assemblies und freigegebene Assemblies?
Eine private Assembly ist anwendungsspezifisch und wird im Verzeichnis (oder in einem darin enthaltenen Unterverzeichnis) dieser Anwendung gespeichert.
Auf eine freigegebene Assembly können mehrere Anwendungen verweisen. Sie wird auch öffentliche oder shared Assembly genannt und in den Global Assembly Cache (GAC) installiert (kopiert). Eine freigegebene Assemby wird von der Common Language Runtime (CLR) überprüft und über einen Strong Name identifiziert.
Zum GAC und den Strong Name kommen wir noch in einem späteren Artikel.
Die zum Lieferumfang von .NET Framework gehörenden Klassen wurden alle als freigegebene Assemblies erstellt.
Wie ist eine Assembly aufgebaut?
Im Allgemeinen kann eine Assembly vier Elemente enthalten:
- Das Assemblymanifest, das die Assemblymetadaten enthält
- Die Typmetadaten
- MSIL-Code (Microsoft Intermediate Language), der die Typen implementiert
- Eine Gruppe von Ressourcen
Von diesen ist nur das Assemblymanifest erforderlich. Um der Assembly jedoch eine sinnvolle Funktion zu geben, sind entweder Typen oder Ressourcen erforderlich. Die Elemente einer Assembly können alle in einer Datei, der sog. Einzeldateiassembly, enthalten sein oder auf mehrere Dateien aufgeteilt werden, wobei ein Mehrfachdateiassembly entsteht. Wenn Sie externe Gruppen von Ressourcen für die Anwendung erstellen, d. h. Ressourcen, die nicht zur Hauptassembly gehören, werden diese als Satellitenassemblies bezeichnet. Satellitenassemblies werden als DLL-Dateien kompiliert, auf die die Hauptassembly verweist.
Was enthält das Assemblymanifest?
Jede Assembly enthält ein Assemblymanifest. Das Assemblymanifest ist mit einem Inhaltsverzeichnis vergleichbar und enthält Folgendes:
- Die Identität der Assembly bestehend aus:
1. Name in Textform
2. Version, die sich aus vier Nummern, durch Punkte getrennt, zusammensetzt:
Major.Minor.Build.Revisions
3. Kultur (Sprachenunterstützung, z.B. de-DE für Deutschland)
Hinweis: Eine Assembly mit Kulturinformationen wird automatisch als Satellitenassembly betrachtet.
4. Strong Name (öffentlicher Schlüssel des Herstellers)
- Liste aller Dateien in der Assembly (Name und Dateihash)
- Verweise zu Typen und Ressourcen
- Abhängigkeiten von anderen Assemblies
- Berechtigungen für die ordnungsgemäße Ausführung der Assembly
Sie wissen nun, was Assemblies eigentlich sind, welche unterschiedlichen Arten es gibt und wie sie aufgebaut sind. Im zweiten Teil werden wir uns damit beschäftigen, wie man Informationen im Assemblymanifest einsehen, hinzufügen und ändern kann.