/clr
(Compilation Common Language Runtime)
Permet aux applications et aux composants d’utiliser des fonctionnalités du Common Language Runtime (CLR) et active la compilation C++/CLI.
Syntaxe
/clr
[:
options]
Arguments
options
Un ou plusieurs des arguments séparés par des virgules suivants.
Aucune
Sans options,
/clr
crée des métadonnées pour le composant. Les métadonnées peuvent être consommées par d’autres applications CLR et permettent au composant de consommer des types et des données dans les métadonnées d’autres composants CLR. Pour plus d’informations, consultez Assemblys mixtes (natif et managé).
netcore
Disponible à partir de Visual Studio 2019 version 16.4,
/clr:netcore
crée des métadonnées et du code pour le composant à l’aide du dernier framework .NET multiplateforme, également appelé .NET Core. Les métadonnées peuvent être consommées par d’autres applications .NET Core. Et l’option permet au composant de consommer des types et des données dans les métadonnées d’autres composants .NET Core.
nostdlib
Indique au compilateur d’ignorer le répertoire par défaut
\clr
. Le compilateur génère des erreurs si vous incluez plusieurs versions d’une DLL, telles que System.dll. Cette option vous permet de spécifier l’infrastructure spécifique à utiliser pendant la compilation.pure
/clr:pure
est déconseillé. L’option est supprimée dans Visual Studio 2017 et ultérieur. Nous vous recommandons de porter vers C# du code devant être écrit en MSIL pur.safe
/clr:safe
est déconseillé. L’option est supprimée dans Visual Studio 2017 et ultérieur. Nous vous recommandons de porter sur C# du code devant être écrit en MSIL sécurisé.noAssembly
/clr:noAssembly
est déconseillé. Utilisez/LN
(Créer un module MSIL) à la place.Indique au compilateur de ne pas insérer un manifeste d’assembly dans le fichier de sortie. Par défaut, l’option
noAssembly
n’est pas en vigueur.Un programme managé qui n’a pas de métadonnées d’assembly dans le manifeste est appelé module. L’option
noAssembly
peut être utilisée uniquement pour produire un module. Si vous compilez à l’aide/c
et/clr:noAssembly
que vous spécifiez l’option/NOASSEMBLY
dans la phase de l’éditeur de liens pour créer un module.Avant Visual Studio 2005,
/clr:noAssembly
obligatoire/LD
./LD
est maintenant implicite lorsque vous spécifiez/clr:noAssembly
.initialAppDomain
initialAppDomain
est obsolète. Permet à une application C++/CLI d’s’exécuter sur la version 1 du CLR. Une application compilée à l’aideinitialAppDomain
ne doit pas être utilisée par une application qui utilise ASP.NET, car elle n’est pas prise en charge dans la version 1 du CLR.
Notes
Le code managé est du code qui peut être inspecté et géré par le CLR. Le code managé peut accéder aux objets managés. Pour plus d’informations, consultez /clr
Restrictions.
Pour plus d’informations sur le développement d’applications qui définissent et consomment des types managés en C++, consultez Extensions de composant pour les plateformes runtime.
Une application compilée à l’aide /clr
peut ou non contenir des données managées.
Pour activer le débogage sur une application managée, consultez /ASSEMBLYDEBUG
(Ajouter DebuggableAttribute).
Seuls les types CLR sont instanciés sur le tas collecté par le garbage. Pour plus d’informations, consultez Classes et structs. Pour compiler une fonction en code natif, utilisez le pragma unmanaged
. Pour plus d’informations, consultez managed
, unmanaged
.
Par défaut, /clr
n’est pas en vigueur. Lorsqu’elle /clr
est en vigueur, /MD
elle est également en vigueur. Pour plus d’informations, consultez /MD
, /MT
/LD
(Utiliser la bibliothèque d’exécution). /MD
garantit que les versions multithreads liées dynamiquement des routines d’exécution sont sélectionnées dans les fichiers d’en-tête standard. Le multithreading est requis pour la programmation managée, car le garbage collector CLR exécute les finaliseurs dans un thread auxiliaire.
Si vous compilez à l’aide /c
de , vous pouvez spécifier le type CLR du fichier de sortie résultant à l’aide de l’option /CLRIMAGETYPE
éditeur de liens.
/clr
implique /EHa
, et aucune autre /EH
option n’est prise en charge pour /clr
. Pour plus d’informations, consultez /EH
(Modèle de gestion des exceptions).
Pour plus d’informations sur la façon de déterminer le type d’image CLR d’un fichier, consultez /CLRHEADER
.
Tous les modules passés à un appel donné de l’éditeur de liens doivent être compilés à l’aide de la même option de compilateur de bibliothèque d’exécution (/MD
ou /LD
).
Utilisez l’option /ASSEMBLYRESOURCE
éditeur de liens pour incorporer une ressource dans un assembly. /DELAYSIGN
, /KEYCONTAINER
et /KEYFILE
les options de l’éditeur de liens vous permettent également de personnaliser la façon dont un assembly est créé.
Lorsqu’il /clr
est utilisé, le _MANAGED
symbole est défini sur 1. Pour plus d’informations, consultez Macros prédéfinies.
Les variables globales d’un fichier objet natif sont initialisées en premier (pendant le cas où DllMain
l’exécutable est une DLL), puis les variables globales de la section managée sont initialisées (avant l’exécution d’un code managé). #pragma init_seg
affecte uniquement l’ordre d’initialisation dans les catégories managées et non managées.
Métadonnées et classes sans nom
Les classes non nommées apparaissent dans les métadonnées sous des noms tels que $UnnamedClass$<crc-of-current-file-name>$<index>$
, où <index>
est un nombre séquentiel des classes non nommées dans la compilation. Ainsi, l'exemple de code suivant génère une classe sans nom dans les métadonnées.
// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;
Utilisez ildasm.exe pour afficher les métadonnées.
Pour définir cette option du compilateur dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.
Définissez la liste déroulante Configuration sur Toutes les configurations et définissez la liste déroulante Plateforme sur Toutes les plateformes.
Sélectionnez la page Propriétés>de configuration C/C++>Général.
Modifiez la propriété Common Language Runtime Support . Sélectionnez OK pour enregistrer vos modifications.
Remarque
Dans l’IDE Visual Studio, l’option /clr
du compilateur peut être définie individuellement dans la page Propriétés>de configuration C/C++>Général de la boîte de dialogue Pages de propriétés. Toutefois, nous vous recommandons d’utiliser un modèle CLR pour créer votre projet. Elle définit toutes les propriétés requises pour la création réussie d’un composant CLR. Une autre façon de définir ces propriétés consiste à utiliser la propriété Common Language Runtime Support dans la page Propriétés>de configuration avancée de la boîte de dialogue Pages de propriétés. Cette propriété définit toutes les autres options d’outil liées au CLR en même temps.
Pour définir cette option du compilateur par programmation
- Consultez CompileAsManaged.
Voir aussi
Options du compilateur MSVC
Syntaxe de la ligne de commande du compilateur MSVC