/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.
keine
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:noAssembly
angeben, 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 VerwendunginitialAppDomain
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
, unmanaged
verwalten.
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, /c
kö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
, /KEYCONTAINER
und /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
Ö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).
Legen Sie die Dropdownliste "Konfiguration " auf " Alle Konfigurationen" fest, und legen Sie die Dropdownliste "Plattform " auf " Alle Plattformen" fest.
Wählen Sie die Seite "Konfigurationseigenschaften>C/C++>Allgemein" aus.
Ä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 CompileAsManaged.
Siehe auch
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile