/clr (Common Language Runtime-Kompilierung)

Ermöglicht Anwendungen und Komponenten die Verwendung von Funktionen der Common Language Runtime (CLR) und ermöglicht die C++/CLI-Kompilierung.

Syntax

/clr[:Optionen]

Argumente

options
Mindestens eines der folgenden durch Komma getrennten Argumente.

  • Keine

    Ohne Optionen erstellt /clr Metadaten für die Komponente. Die Metadaten können von anderen CLR-Anwendungen verwendet werden und ermöglichen es der Komponente, Typen und Daten in den Metadaten anderer CLR-Komponenten zu nutzen. Weitere Informationen finden Sie unter Gemischte (native und verwaltete) Assemblys.

  • netcore

    Ab Version Visual Studio 2019 16.4 verfügbar, /clr:netcore erstellt Metadaten und Code für die Komponente mithilfe des neuesten plattformübergreifenden .NET Framework, auch bekannt als .NET Core. Die Metadaten können von anderen .NET Core-Anwendungen verwendet werden. Außerdem ermöglicht die Option der Komponente die Nutzung von Typen und Daten in den Metadaten anderer .NET Core-Komponenten.

  • nostdlib

    Weist den Compiler an, das Standardverzeichnis zu \clr ignorieren. Der Compiler erzeugt Fehler, wenn Sie mehrere Versionen einer DLL enthalten, z. B. System.dll. Mit dieser Option können Sie das spezifische Framework angeben, das während der Kompilierung verwendet werden soll.

  • pure

    /clr:pure ist veraltet. Die Option wurde in Visual Studio 2017 und höher entfernt. Es wird empfohlen, dass Sie Code, der reines MSIL sein muss, nach C# portieren.

  • safe

    /clr:safe ist veraltet. Die Option wurde in Visual Studio 2017 und höher entfernt. Es wird empfohlen, dass Sie Code, der sicheres MSIL sein muss, nach C# portieren.

  • noAssembly

    /clr:noAssembly ist veraltet. Verwenden /LN Sie stattdessen (MSIL-Modul erstellen).

    Weist den Compiler an, kein Assemblymanifest in die Ausgabedatei einfügungen. Standardmäßig ist noAssembly die Option nicht aktiviert.

    Ein verwaltetes Programm, das keine Assemblymetadaten im Manifest enthält, wird als Modul bezeichnet. Die noAssembly Option kann nur zum Erstellen eines Moduls verwendet werden. Wenn Sie mit und kompilieren /c/clr:noAssembly, geben Sie die Option /NOASSEMBLY in der Linkerphase an, um ein Modul zu erstellen.

    Vor Visual Studio 2005 war /clr:noAssembly erforderlich/LD. /LD wird jetzt impliziert, wenn Sie angeben /clr:noAssembly.

  • initialAppDomain

    initialAppDomain ist veraltet. Ermöglicht die Ausführung einer C++/CLI-Anwendung in Version 1 der CLR. Eine Anwendung, die initialAppDomain mit kompiliert wird, sollte nicht von einer Anwendung verwendet werden, die ASP.NET verwendet, da sie in Version 1 der CLR nicht unterstützt wird.

Bemerkungen

Verwalteter Code ist Code, der von der CLR überprüft und verwaltet werden kann. Verwalteter Code kann auf verwaltete Objekte zugreifen. Weitere Informationen finden Sie unter /clr Einschränkungen.

Informationen zum Entwickeln von Anwendungen, die verwaltete Typen in C++ definieren und nutzen, finden Sie unter Komponentenerweiterungen für Laufzeitplattformen.

Eine anwendung, die mit kompiliert wurde /clr , kann verwaltete Daten enthalten.

Informationen zum Aktivieren des Debuggens für eine verwaltete Anwendung finden Sie unter /ASSEMBLYDEBUG (DebuggableAttribute hinzufügen).

Nur CLR-Typen werden auf dem Garbage Collection-Heap instanziiert. Weitere Informationen finden Sie unter Klassen und Strukturen. Um eine Funktion in systemeigenem Code zu kompilieren, verwenden Sie das unmanaged -Pragma. Weitere Informationen finden Sie unter managed, unmanaged.

Standardmäßig ist /clr nicht wirksam. Wenn /clr in Kraft ist, /MD ist ebenfalls wirksam. Weitere Informationen finden Sie unter /MD, /MT, /LD (Run-Time Bibliothek verwenden). /MD stellt sicher, dass die dynamisch verknüpften Multithreadversionen der Laufzeitroutinen aus den Standardheaderdateien ausgewählt werden. Multithreading ist für die verwaltete Programmierung erforderlich, da der CLR-Garbage Collector Finalizer in einem Hilfsthread ausführt.

Wenn Sie mit kompilieren /c, können Sie den CLR-Typ der resultierenden Ausgabedatei mithilfe der Linkeroption /CLRIMAGETYPE angeben.

/clr impliziert /EHa, und es werden keine /EH anderen Optionen für unterstützt /clr. Weitere Informationen finden Sie unter /EH (Ausnahmebehandlungsmodell).

Informationen zum Bestimmen des CLR-Imagetyps einer Datei finden Sie unter /CLRHEADER.

Alle Module, die an einen bestimmten Aufruf des Linkers übergeben werden, müssen mit der gleichen Laufzeitbibliothekscompileroption ( oder )/MD kompiliert werden /LD.

Verwenden Sie die /ASSEMBLYRESOURCE Linkeroption , um eine Ressource in eine Assembly einbetten. /DELAYSIGNMit den Linkeroptionen /KEYFILE , /KEYCONTAINERund können Sie auch anpassen, wie eine Assembly erstellt wird.

Wenn /clr verwendet wird, wird _MANAGED das Symbol als 1 definiert. Weitere Informationen finden Sie unter Vordefinierte Makros.

Die globalen Variablen in einer nativen Objektdatei werden zuerst initialisiert ( DllMain während, wenn die ausführbare Datei eine DLL ist), und dann werden die globalen Variablen im verwalteten Abschnitt initialisiert (bevor verwalteter Code ausgeführt wird). #pragma init_seg wirkt sich nur auf die Reihenfolge der Initialisierung in den verwalteten und nicht verwalteten Kategorien aus.

Metadaten und unbenannte Klassen

Unbenannte Klassen werden in Metadaten unter Namen $UnnamedClass$<crc-of-current-file-name>$<index>$<index> wie angezeigt, wobei eine sequenzielle Anzahl der unbenannten Klassen in der Kompilierung ist. Im folgenden Codebeispiel wird z. B. eine unbenannte Klasse in den Metadaten generiert.

// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;

Mithilfe von ildasm.exe können Sie Metadaten anzeigen.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Legen Sie die Dropdownliste Konfiguration auf Alle Konfigurationen und die Dropdownliste Plattform auf Alle Plattformen fest.

  3. Wählen Sie die Seite KonfigurationseigenschaftenC>/C++>Allgemein aus.

  4. Ändern Sie die Eigenschaft Common Language Runtime-Unterstützung . Klicken Sie auf OK, um die Änderungen zu speichern.

Hinweis

In der Visual Studio IDE /clr> kann die Compileroption einzeln auf der Seite KonfigurationseigenschaftenC/C++>Allgemein des Dialogfelds Eigenschaftenseiten festgelegt werden. Es wird jedoch empfohlen, eine CLR-Vorlage zu verwenden, um Ihr Projekt zu erstellen. Sie legt alle Eigenschaften fest, die für die erfolgreiche Erstellung einer CLR-Komponente erforderlich sind. Eine weitere Möglichkeit zum Festlegen dieser Eigenschaften ist die Verwendung der Common Language Runtime-Unterstützungseigenschaft> auf der Seite KonfigurationseigenschaftenErste seite des Dialogfelds Eigenschaftenseiten. Diese Eigenschaft legt alle anderen CLR-bezogenen Tooloptionen gleichzeitig fest.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile