Wie erstelle ich Assemblies?
Zum Erstellen von Assemblies stehen Ihnen verschiedene Möglichkeiten zur Verfügung, je nach Art der Assemblies ? Einfachdateiassembly, Bibliothekassembly oder Mehrfachdateiassembly.
Wie erstelle ich eine Einfachdateiassembly?
Das einfachste Beispiel für eine Assembly ist eine einzelne Datei mit einem einfachen Namen, die in eine einzelne Anwendungsdomäne geladen wird.
Andere Assemblies außerhalb des Anwendungsverzeichnisses können nicht auf diese Assembly verweisen; sie wird auch keiner Versionsüberprüfung unterzogen. Um die aus der Assembly bestehende Anwendung zu deinstallieren, löschen Sie einfach das Verzeichnis, in dem sie sich befindet. Viele Entwickler benötigen zur Weitergabe einer Anwendung lediglich eine Assembly mit diesen Features.
Einfachdateiassemblies können Sie wie gewohnt mit Hilfe einer IDE wie Visual Studio .NET erstellen. Beim Kompilieren von Visual Studio .NET-Quelldateien werden solche Assemblies automatisch erstellt.
Um eine Einfachdateiassembly mit Hilfe von Befehlszeilencompilern zu erstellen, geben Sie in der Eingabeaufforderung folgenden Befehl ein:
<Compilerbefehl> /out:<Dateiname> <Modulname>
Dabei ist der Compilerbefehl der Compilerbefehl für die in Ihrem Codemodul verwendete Sprache, der Dateiname der Name der Ausgabedatei und der Modulname der Name des Codemoduls, das in die Assembly kompiliert werden soll.
Durch den folgenden Beispielcode wird aus einem Codemodul namens myCode eine Assembly namens myAssembly.exe erstellt.
[C#] csc /out:myAssembly.exe myCode.cs [Visual Basic] vbc /out:myAssembly.exe myCode.vb |
Wie erstelle ich eine Bibliothekassembly?
Hat die Assembly keinen Einstiegspunkt, z. B. eine Main-Methode oder WinMain-Methode, können Sie eine Bibliothekassembly erstellen.
Eine Bibliothekassembly ist ähnlich aufgebaut wie eine Klassenbibliothek. Sie enthält Typen, auf die andere Assemblies verweisen, besitzt aber keinen Einstiegspunkt, um eine Ausführung zu starten.
Durch den folgenden Beispielcode wird aus einem Codemodul namens myCode eine Bibliothekassembly namens myCodeAssembly.dll erstellt.
[C#] csc /out:myCodeLibrary.dll /t:library myCode.cs [Visual Basic] vbc /out:myCodeLibrary.dll /t:library myCode.vb |
Wie erstelle ich eine Mehrfachdateiassembly?
Eine Mehrfachdateiassembly ist eine Assembly, die aus mehreren Modulen besteht. Das Manifest muß gemeinsam mit dem Einstiegspunkt in einem der Module enthalten sein.
Sie erstellen eine Mehrfachdateiassembly, wenn Sie Module kombinieren möchten, die in verschiedenen Sprachen geschrieben sind, oder um das Downloaden einer Anwendung zu optimieren, indem Sie selten verwendete Typen in einem Modul ablegen, das nur bei Bedarf gedownloadet wird.
Wenn Sie Mehrfachdateiassemblies erstellen möchten, müssen Sie auf einen Befehlszeilencompiler oder Visual Studio .NET mit Managed Extensions for C++ zurückgreifen.
Beispiel:
Erstellen Sie zwei voneinander unabhängige Dateien, die unterschiedliche Namespaces aufweisen.
Zunächst werden diese beiden Module nun jeweils über die Kommandozeile mit dem Compilerschalter /target:module kompiliert. Dabei ist die Endung .netmodule die Standarderweiterung für Codemodule.
csc /target:module out:modul1.netmodule modul1.cs csc /target:module out:modul2.netmodule modul2.cs |
Jetzt bleibt nur noch, beide zu einer DLL (inklusive Manifest, also einer Assembly) zusammenzufügen. Dies geschieht über den Compilerschalter /addmodule.
Achten Sie daraauf, daß die Module im gleichen Verzeichnis liegen und daß es sich wirklich um Module handelt und nicht um Assemblies, sonst funktioniert /addmodule nicht. Mehrere Modulnamen werden über Semikola getrennt.
csc /target:library /addmodule:modul1.netmodule;modul2.netmodule /out:testlib.dll |
Wenn Sie diese Library nun in einem Ihrer Projekte einbinden, werden Sie zwei Namespaces darin finden ? Modul1Namespace und Modul2Namespace. Beide Module wurden zu einer Assembly zusammengefasst und der Compiler hat das Manifest hineingeschrieben.
Was ist das Assembly Linker-Tool?
Eine andere Möglichkeit ist, mit dem Assembly Linker-Tool (Al.exe) aus einer Auflistung von kompilierten Codemodulen eine Assembly erzeugen.
Um mit dem Assembly Linker-Tool eine Mehrfachdateiassembly zu erstellen, geben Sie in der Eingabeaufforderung folgenden Befehl ein:
al <Modulname> <Modulname> .../main:<Methodenname> /out:<Dateiname> /target:<Assemblydateityp> |
Die Modulname-Argumente sind die Namen aller Module, die in der Assembly enthalten sein sollen. Die Option /main: gibt den Methodennamen an, der den Einstiegspunkt der Assembly darstellt. Die Option /out: gibt den Namen der Ausgabedatei an, die Assemblymetadaten enthält. Die Option /target: gibt an, dass die Assembly eine ausführbare Datei für eine Konsolenanwendung (.exe), eine ausführbare Windows-Datei (.win) oder eine Bibliothek ist (.lib).
Im folgenden Beispiel erstellt Al.exe eine Assembly namens myAssembly.exe, die eine ausführbare Datei für eine Konsolenanwendung ist. Die Anwendung besteht aus zwei Modulen, Modul1.netmodule und Modul2.netmodule, sowie der ausführbaren Datei myAssembly.exe, die ausschließlich Assemblymetadaten enthält. Der Einstiegspunkt der Assembly ist die Main-Methode in der myApp-Klasse.
al Modul1.netmodule Modul2.netmodule /main:myApp.Main /out:myAssembly.exe /target:exe |
Das Assembly Linker-Tool kennt noch eine Menge mehr Optionen, die Sie am besten einmal in der .NET Framework SDK-Dokumentation unter dem Stichwort 'al.exe' nachlesen.
Dort werden auch die Fehler und Warnungen des Al.exe-Tools beschrieben.
Nun wissen Sie, wie Sie Einfachdateiassemblies, Bibliothekassemblies und Mehrfachdateiassemblies erstellen.
Das Erstellen einer Assembly mit einem starken Namen ist ein eigenes Kapitel, mit dem wir uns das nächste Mal beschäftigen.