Auswählen des Formats von .netmodule-Eingabedateien

Eine MSIL-OBJ-Datei (kompiliert mit /clr) kann auch als NETMODULE-Datei verwendet werden. OBJ-Dateien enthalten Metadaten und systemeigene Symbole. . NETMODULE-Dateien enthalten nur Metadaten.

Sie können eine MSIL-OBJ-Datei über die Compileroption /addmodule an einen beliebigen anderen Visual Studio-Compiler übergeben. (Beachten Sie jedoch, dass die OBJ-Datei Teil der erstellten Assembly wird und zusammen mit dieser versendet werden muss.) Zum Beispiel verfügen Visual C# und Visual Basic über die Compileroption /addmodule.

Tipp

In den meisten Fällen muss die OBJ-Datei aus der Kompilierung, mit der das .NET-Modul erstellt wurde, an den Linker übergeben werden. Eine Ausnahme ist, wenn die NETMODULE-Datei mit /clr:pure erstellt wurde. Das Übergeben einer DLL- oder NETMODULE-MSIL-Moduldatei an den Linker führt möglicherweise zu LNK1107.

OBJ-Dateien zusammen mit den zugehörigen H-Dateien, die Sie über #include in der Quelle referenzieren, ermöglichen die Verwendung der systemeigenen Typen in C++-Anwendungen, während in einer NETMODULE-Datei nur die verwalteten Typen von einer C++-Anwendung verwendet werden können. Beim Übergeben einer OBJ-Datei mit #using sind keine Informationen zu systemeigenen Typen verfügbar. Fügen Sie stattdessen mit #include die H-Datei der OBJ-Datei ein.

Andere Visual Studio-Compiler können nur verwaltete Typen eines Moduls verwenden.

Ermitteln Sie wie folgt, ob Sie eine NETMODULE- oder eine OBJ-Datei als Moduleingabe in den Visual C++-Linker verwenden müssen:

  • Wenn Sie einen anderen Visual Studio-Compiler als Visual C++ verwenden, erstellen Sie eine NETMODULE-Datei als Eingabe in den Linker.

  • Wenn Sie den Visual C++-Compiler für die Erstellung von Modulen verwenden und wenn die Module für andere Zwecke als zur Erstellung einer Bibliothek verwendet werden, verwenden Sie die vom Compiler erstellten OBJ-Dateien als Moduleingabe in den Linker. Verwenden Sie nicht die NETMODULE-Datei als Eingabe.

  • Wenn die Module zur Erstellung einer systemeigenen (und nicht einer verwalteten) Bibliothek verwendet werden, verwenden Sie die OBJ-Dateien als Moduleingabe in den Linker, und erstellen Sie eine LIB-Bibliotheksdatei.

  • Wenn die Module zur Erstellung einer verwalteten Bibliothek verwendet werden und wenn alle Moduleingaben in den Linker überprüfbar sind (erstellt mit /clr:safe), verwenden Sie OBJ-Dateien als Moduleingabe in den Linker, und erstellen Sie eine DLL- (Assembly) oder NETMODULE- (Modul) Bibliotheksdatei.

  • Wenn die Module zur Erstellung einer verwalteten Bibliothek verwendet werden und wenn alle Moduleingaben in den Linker mit /clr:pure oder /clr:safe erstellt werden, verwenden Sie OBJ-Dateien als Moduleingabe in den Linker, und erstellen Sie eine DLL-Datei (Assembly) oder eine NETMODULE-Datei (Modul), wenn Sie ausschließlich verwaltete Typen aus der Bibliothek verfügbar machen möchten. Wenn Sie verwaltete Typen aus der Bibliothek verfügbar machen möchten und die systemeigenen Typen in der Bibliothek außerdem von C++-Anwendungen verwendet werden sollen, besteht ihre Bibliothek aus den OBJ-Dateien für die Komponentenmodule der Bibliothek (wahrscheinlich möchten Sie auch die H-Dateien für jedes Modul versenden, sodass diese mit #include vom Quellcode referenziert werden können).

  • Wenn die Module zur Erstellung einer verwalteten Bibliothek verwendet werden und wenn mindestens ein Eingabemodul für den Linker ausschließlich mit /clr erstellt wird, verwenden Sie OBJ-Dateien als Moduleingabe in den Linker, und erstellen Sie eine DLL-Datei (Assembly). Wenn Sie verwaltete Typen aus der Bibliothek verfügbar machen möchten und die systemeigenen Typen in der Bibliothek außerdem von C++-Anwendungen verwendet werden sollen, besteht ihre Bibliothek aus den OBJ-Dateien für die Komponentenmodule der Bibliothek (wahrscheinlich möchten Sie auch die H-Dateien für jedes Modul versenden, sodass diese mit #include vom Quellcode referenziert werden können).

Siehe auch

Referenz

.NETMODULE-Dateien als Eingabe für den Linker