Freigeben über


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. .netmodules enthalten nur Metadaten.

Sie können eine MSIL-OBJ-Datei über die Compileroption /addmodule an einen anderen Visual Studio-Compiler übergeben (beachten Sie jedoch, dass die OBJ-Datei Teil der resultierenden Assembly wird und mit der Assembly ausgeliefert werden muss). Beispielsweise verfügen Visual C# und Visual Basic über die Compileroption "/addmodule".

Hinweis

In den meisten Fällen müssen Sie an den Linker die OBJ-Datei aus der Kompilierung übergeben, die das .net-Modul erstellt hat. Das Übergeben einer .dll- oder .netmodule MSIL-Moduldatei an den Linker kann zu LNK1107 führen.

OBJ-Dateien zusammen mit den zugehörigen H-Dateien, auf die Sie über #include in der Quelle verweisen, ermöglichen C++-Anwendungen die Nutzung der systemeigenen Typen im Modul, während in einer .netmodule-Datei nur die verwalteten Typen von einer C++-Anwendung verwendet werden können. Wenn Sie versuchen, eine OBJ-Datei an #using zu übergeben, stehen keine Informationen zu systemeigenen Typen zur Verfügung; #include stattdessen die H-Datei der OBJ-Datei.

Andere Visual Studio-Compiler können nur verwaltete Typen aus einem Modul nutzen.

Verwenden Sie Folgendes, um zu bestimmen, ob Sie eine .netmodule- oder obj-Datei als Moduleingabe für den MSVC-Linker verwenden müssen:

  • Wenn Sie mit einem anderen Visual Studio-Compiler als Visual C++ erstellen, erstellen Sie ein .netmodule, und verwenden Sie das .netmodule als Eingabe für den Linker.

  • Wenn Sie den MSVC-Compiler zum Erstellen von Modulen verwenden und wenn die Module verwendet werden, um etwas anderes als eine Bibliothek zu erstellen, verwenden Sie die vom Compiler erstellten OBJ-Dateien als Moduleingabe für den Linker; verwenden Sie die .netmodule-Datei nicht als Eingabe.

  • Wenn Ihre Module verwendet werden, um eine systemeigene (keine verwaltete) Bibliothek zu erstellen, verwenden Sie OBJ-Dateien als Moduleingabe für den Linker, und generieren Sie eine LIB-Bibliotheksdatei.

  • Wenn Ihre Module verwendet werden, um eine verwaltete Bibliothek zu erstellen, und wenn alle Moduleingaben für den Linker überprüft werden können (erstellt mit /clr:safe), verwenden Sie OBJ-Dateien als Moduleingabe für den Linker, und generieren Sie eine .dll (Assembly) oder .netmodule (Modul)-Bibliotheksdatei.

  • Wenn Ihre Module verwendet werden, um eine verwaltete Bibliothek zu erstellen, und wenn mindestens eine Moduleingabe für den Linker mit nur /clr erstellt wird, verwenden Sie OBJ-Dateien als Moduleingabe für den Linker und generieren eine DLL (Assembly). Wenn Sie verwaltete Typen aus der Bibliothek verfügbar machen möchten und C++-Anwendungen auch die systemeigenen Typen in der Bibliothek verwenden sollen, besteht Ihre Bibliothek aus den OBJ-Dateien für die Komponentenmodule der Bibliotheken (Sie möchten auch die H-Dateien für jedes Modul versenden, sodass sie mit #include aus Quellcode referenziert werden können).

Siehe auch

.NETMODULE-Dateien als Eingabe für den Linker