/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:noAssemblyque 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’aide initialAppDomain 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 /cde , 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, /KEYCONTAINERet /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

  1. 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.

  2. Définissez la liste déroulante Configuration sur Toutes les configurations et définissez la liste déroulante Plateforme sur Toutes les plateformes.

  3. Sélectionnez la page Propriétés>de configuration C/C++>Général.

  4. 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

Voir aussi

Options du compilateur MSVC
Syntaxe de la ligne de commande du compilateur MSVC