/clr (Common Language Runtime Compilation)

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

Syntax

/clr[:Optionen]

Argumente

Optionen
Mindestens eines der folgenden durch Trennzeichen getrennten Argumente.

  • none

    Ohne Optionen /clr werden Metadaten für die Komponente erstellt. Die Metadaten können von anderen CLR-Anwendungen genutzt werden und ermöglicht 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

    Verfügbar ab Visual Studio 2019, Version 16.4, /clr:netcore erstellt Metadaten und Code für die Komponente mit dem neuesten plattformübergreifenden .NET Framework, auch bekannt als .NET Core. Die Metadaten können von anderen .NET Core-Anwendungen genutzt werden. Die Option ermöglicht es der Komponente, Typen und Daten in den Metadaten anderer .NET Core-Komponenten zu nutzen.

  • nostdlib

    Weist den Compiler an, das Standardverzeichnis \clr zu ignorieren. Der Compiler erzeugt Fehler, wenn Sie mehrere Versionen einer DLL einschließen, 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 Sie /LN stattdessen (MSIL-Modul erstellen).

    Weist den Compiler an, kein Assemblymanifest in die Ausgabedatei einzufügen. Standardmäßig ist die noAssembly Option nicht wirksam.

    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 die Kompilierung verwenden /c und /clr:noAssemblyangeben, geben Sie die /NOASSEMBLY Option in der Linkerphase an, um ein Modul zu erstellen.

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

  • initialAppDomain

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

Hinweise

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 Runtime-Plattformen.

Eine mit der Verwendung /clr kompilierte Anwendung kann verwaltete Daten enthalten oder nicht.

Informationen zum Aktivieren des Debuggens für eine verwaltete Anwendung finden Sie unter (Hinzufügen von DebuggableAttribute).To enable debugging on a managed application, see /ASSEMBLYDEBUG (Add DebuggableAttribute).

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, unmanagedverwalten.

Standardmäßig /clr ist dies nicht wirksam. Wenn /clr sie wirksam ist, /MD ist es auch in Kraft. Weitere Informationen finden Sie unter /MD, , /MT( /LD Laufzeitbibliothek 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 die Datei kompilieren, /ckönnen Sie den CLR-Typ der resultierenden Ausgabedatei mithilfe der /CLRIMAGETYPE Linkeroption angeben.

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

Informationen zum Ermitteln des CLR-Bildtyps einer Datei finden Sie unter /CLRHEADER.

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

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

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

Die globalen Variablen in einer systemeigenen Objektdatei werden zuerst initialisiert (wenn DllMain 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 Initialisierungsreihenfolge in den verwalteten und nicht verwalteten Kategorien aus.

Metadaten und unbenannte Klassen

Unbenannte Klassen werden in Metadaten unter Namen angezeigt, z $UnnamedClass$<crc-of-current-file-name>$<index>$. B. eine <index> sequenzielle Anzahl der nicht benannten Klassen in der Kompilierung. 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" fest, und legen Sie die Dropdownliste "Plattform " auf " Alle Plattformen" fest.

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

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

Hinweis

In der Visual Studio-IDE kann die /clr Compileroption auf der Seite "Konfigurationseigenschaften>C/C++>Allgemein" des Dialogfelds "Eigenschaftenseiten" einzeln festgelegt werden. Es wird jedoch empfohlen, eine CLR-Vorlage zum Erstellen Ihres Projekts zu verwenden. Es legt alle Eigenschaften fest, die für die erfolgreiche Erstellung einer CLR-Komponente erforderlich sind. Eine weitere Möglichkeit zum Festlegen dieser Eigenschaften besteht darin, die Unterstützungseigenschaft "Common Language Runtime" auf der Seite "Erweiterte Konfigurationseigenschaften>" des Dialogfelds "Eigenschaftenseiten" zu verwenden. Diese Eigenschaft legt alle anderen CLR-bezogenen Tooloptionen auf einmal fest.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile