Gewusst wie: Erstellen einer Mehrfachdateiassembly

Aktualisiert: November 2007

Dieser Abschnitt beschreibt das Verfahren zum Erstellen einer Mehrfachdateiassembly und enthält ein vollständiges Beispiel, das alle Schritte des Verfahrens veranschaulicht.

So erstellen Sie eine Mehrfachdateiassembly

  1. Kompilieren Sie alle Dateien mit Namespaces, auf die andere Module der Assembly verweisen, in Codemodule. .netmodule ist die Standarderweiterung für Codemodule. Beispiel: eine Datei mit dem Namen Stringer erzeugt einen Namespace mit dem Namen myStringer, auf den im Clientdateicode verwiesen wird. In diesem Falle sollte Stringer zuerst in ein Codemodul kompiliert werden.

  2. Kompilieren Sie alle weiteren Module unter Verwendung der erforderlichen Compileroptionen, um die anderen Module anzugeben, auf die im Code verwiesen wird.

  3. Erstellen Sie mit dem Assembly Linker-Tool (Al.exe) eine Ausgabedatei, die das Assemblymanifest enthält. In dieser Datei sind Referenzinformationen zu allen zur Assembly gehörenden Modulen und Ressourcen enthalten.

    Hinweis:

    Die Visual Studio 2005-IDE für C# und Visual Basic kann nur verwendet werden, um Einzeldateiassemblys zu erstellen. Wenn Sie Mehrfachdateiassemblys erstellen möchten, müssen Sie auf Befehlszeilencompiler oder auf Visual Studio 2005 mit Visual C++ zurückgreifen.

Das folgende Beispiel veranschaulicht Schritt 1 des oben beschriebenen Verfahrens, wobei Dateien mit Namespaces kompiliert werden, auf die von anderen Dateien verwiesen wird. Dieses Beispiel beginnt mit einfachem Code für die Datei Stringer, die über einen Namespace mit dem Namen myStringer mit einer Klasse mit dem Namen Stringer verfügt. Die Stringer-Klasse enthält die StringerMethod-Methode, die eine einzelne Zeile auf der Konsole ausgibt.

' Assembly building example in the .NET Framework.
Imports System
Namespace myStringer 
   Public Class Stringer
      Public Sub StringerMethod() 
         Console.WriteLine("This is a line from StringerMethod.")
      End Sub
   End Class
End Namespace
// Assembly building example in the .NET Framework.
using System;
namespace myStringer 
   {
   public class Stringer
      { 
      public void StringerMethod() 
         {
         System.Console.WriteLine("This is a line from StringerMethod.");
         }
      }
   }

Verwenden Sie folgenden Befehl, um diesen Code zu kompilieren:

vbc /t:module Stringer.vb
csc /t:module Stringer.cs

Durch die Compileroption /t: in Verbindung mit dem Parameter module wird die Datei als Modul kompiliert, nicht als Assembly. Der Compiler erzeugt ein Modul mit dem Namen Stringer.netmodule, das anschließend zu einer Assembly hinzugefügt werden kann.

In Schritt zwei des obigen Verfahrens müssen Sie Module mit Verweisen auf andere Module kompilieren. In diesem Schritt kommt die /addmodule-Compileroption zum Einsatz. Im folgenden Beispiel verfügt ein Codemodul mit dem Namen Client über die Main-Methode als Einstiegspunkt. Diese verweist wiederum auf eine Methode im Stringer.dll-Modul, das in Schritt 1 erstellt wurde.

Der folgende Beispielcode ist der Code für Client.

Imports System
Imports myStringer  'The namespace created in Stringer.netmodule.
Class MainClientApp
   ' Shared method Main is the entry point method.
   Public Shared Sub Main()
      Dim myStringInstance As New Stringer()
      Console.WriteLine("Client code executes")
      'myStringComp.Stringer()
      myStringInstance.StringerMethod()
   End Sub
End Class
using System;
using myStringer; //The namespace created in Stringer.netmodule.
class MainClientApp 
{
   // Static method Main is the entry point method.
   public static void Main() 
   { 
      Stringer myStringInstance = new Stringer();
      Console.WriteLine("Client code executes");
      //myStringComp.Stringer();
      myStringInstance.StringerMethod();
   }
}

Verwenden Sie folgenden Befehl, um diesen Code zu kompilieren:

vbc /addmodule:Stringer.netmodule /t:module Client.vb
csc /addmodule:Stringer.netmodule /t:module Client.cs

Verwenden Sie die Option /t:module, da dieses Modul in einem späteren Schritt zu einer Assembly hinzugefügt wird. Legen Sie die /addmodule-Option fest, da der Code in Client auf einen Namespace verweist, der vom Code in Stringer.netmodule erzeugt wurde. Der Compiler erzeugt ein Modul mit dem Namen Client.netmodule, das einen Verweis auf ein anderes Modul, Stringer.netmodule, enthält.

Hinweis:

Die C#- und Visual Basic-Compiler unterstützen das direkte Erstellen von Mehrfachdateiassemblys unter Verwendung der beiden folgenden unterschiedlichen Syntaxformen.

  • Zwei Kompilierungen erzeugen eine aus zwei Dateien bestehende Assembly:

    vbc /t:module Stringer.vb
    vbc Client.vb /addmodule:Stringer.netmodule
    
    csc /t:module Stringer.cs
    csc Client.cs /addmodule:Stringer.netmodule
    
  • Eine Kompilierung erzeugt eine aus zwei Dateien bestehende Assembly:

    vbc /out:Stringer.netmodule Stringer.vb /out:Client.exe Client.vb
    
    csc /out:Client.exe Client.cs /out:Stringer.netmodule Stringer.cs
    

Sie können mit dem Assembly Linker-Tool (Al.exe) aus einer Auflistung von kompilierten Codemodulen eine Assembly erzeugen.

So erstellen Sie mithilfe des Assemblylinkers eine Mehrfachdateiassembly

  • Geben Sie an der Eingabeaufforderung folgenden Befehl ein:

    al <Modulname> <Modulname> … /main:<Methodenname> /out:<Dateiname> /target:<Assemblydateityp>

    In diesem Befehl bezeichnen die Modulname-Argumente 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 mit dem Namen myAssembly.exe, die eine ausführbare Datei für eine Konsolenanwendung ist. Die Anwendung besteht aus zwei Modulen, Client.netmodule und Stringer.netmodule, sowie der ausführbaren Datei myAssembly.exe, die ausschließlich Assemblymetadaten enthält. Der Einstiegspunkt der Assembly ist die Main-Methode in der MainClientApp-Klasse, die sich in der Datei Client.dll befindet.

al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exe 

Sie können das MSIL Disassembler-Tool (Ildasm.exe) verwenden, um den Inhalt einer Assembly zu untersuchen oder um zu bestimmen, ob es sich bei einer Datei um eine Assembly oder ein Modul handelt.

Siehe auch

Aufgaben

Gewusst wie: Ansichtsassemblyinhalt

Konzepte

Erstellen von Assemblys

So sucht Common Language Runtime nach Assemblys

Mehrfachdateiassemblys