/clr (Compilation pour le Common Language Runtime)

Permet aux applications et aux composants d’utiliser les 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.

  • aucun

    Sans option, /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 de la dernière version de .net framework multiplateforme, également connue sous le nom de .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 à la place (créer un module MSIL). /LN

    Indique au compilateur de ne pas insérer de manifeste d’assembly dans le fichier de sortie. Par défaut, l' noAssembly option n’est pas appliquée.

    Un programme managé qui n’a pas de métadonnées d’assembly dans le manifeste est appelé module. L' noAssembly option peut être utilisée uniquement pour produire un module. Si vous compilez à l’aide /c de et /clr:noAssembly , spécifiez l' /NOASSEMBLY option dans la phase de l’éditeur de liens pour créer un module.

    avant le Visual Studio 2005, /clr:noAssembly obligatoire /LD . /LD est désormais implicite lorsque vous spécifiez /clr:noAssembly .

  • initialAppDomain

    initialAppDomain est obsolète. Permet à une application C++/CLI de s’exécuter sur la version 1 du CLR. une application compilée à l’aide initialAppDomain de 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 utilisent des types managés en C++, consultez extensions de composant pour les plateformes Runtime.

Une application compilée à l’aide /clr de peut ou ne peut pas contenir de données managées.

Pour activer le débogage sur une application managée, consultez /ASSEMBLYDEBUG (Add DebuggableAttribute).

Seuls les types CLR sont instanciés sur le tas récupéré par le garbage collector. Pour plus d’informations, consultez Classes et structs. Pour compiler une fonction en code natif, utilisez le pragma unmanaged . Pour plus d’informations , consultez managedunmanaged .

Par défaut, /clr n’est pas en vigueur. Lorsque /clr est en vigueur, /MD est également activé. Pour plus d’informations, consultez /MD , /MT , /LD (utilisez Run-Time bibliothèque). /MD garantit que les versions multithread, liées de manière dynamique, des routines d’exécution sont sélectionnées à partir des 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 de l' /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 du compilateur de la bibliothèque Runtime ( /MD ou /LD ).

Utilisez l’option de l' /ASSEMBLYRESOURCE éditeur de liens pour incorporer une ressource dans un assembly. /DELAYSIGNles options, /KEYCONTAINER et de /KEYFILE l’éditeur de liens vous permettent également de personnaliser la façon dont un assembly est créé.

Lorsque /clr est utilisé, le _MANAGED symbole est défini sur 1. Pour plus d’informations, consultez macros prédéfinies.

Les variables globales dans un fichier objet natif sont initialisées en premier (pendant DllMain si l’exécutable est une dll), puis les variables globales de la section managée sont initialisées (avant l’exécution de tout 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 sans nom 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 sans nom 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, puis définissez la liste déroulante plateforme sur toutes les plateformes.

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

  4. Modifiez la propriété prise en charge du Common Language Runtime . Choisissez OK pour enregistrer vos modifications.

Notes

dans l’IDE Visual Studio, l' /clr option de compilateur peut être définie individuellement dans la page propriétés> de ConfigurationC/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. Il 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é prise en charge du Common Language Runtime dans la page Propriétés>avancées de la configuration de la boîte de dialogue pages de propriétés. Cette propriété définit toutes les autres options d’outils liées au CLR à la fois.

Pour définir cette option du compilateur par programmation

Voir aussi

Options du compilateur MSVC
syntaxe de Command-Line du compilateur MSVC