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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für