Partager via


Utiliser des ensembles de règles pour spécifier les règles C++ à exécuter

Dans Visual Studio, vous pouvez créer et modifier un ensemble de règles personnalisé pour répondre aux besoins spécifiques du projet associés à l’analyse du code. Les ensembles de règles par défaut sont stockés dans %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

Visual Studio 2017 version 15.7 et ultérieure : vous pouvez créer des ensembles de règles personnalisés à l’aide de n’importe quel éditeur de texte et les appliquer dans les builds de ligne de commande, quel que soit le système de génération que vous utilisez. Pour plus d’informations, consultez /analyze:ruleset.

Pour créer un ensemble de règles C++ personnalisé dans Visual Studio, un projet C/C++ doit être ouvert dans l’IDE Visual Studio. Vous ouvrez ensuite un ensemble de règles standard dans l’éditeur d’ensembles de règles, puis ajoutez ou supprimez des règles spécifiques et modifiez éventuellement l’action qui se produit lorsque l’analyse du code détermine qu’une règle a été violée.

Pour créer un jeu de règles personnalisé, vous l’enregistrez à l’aide d’un nouveau nom de fichier. L’ensemble de règles personnalisé est automatiquement affecté au projet.

Pour créer une règle personnalisée à partir d’un jeu de règles existant unique

  1. Dans Explorateur de solutions, ouvrez le menu contextuel du projet, puis choisissez Propriétés.

  2. Dans la boîte de dialogue Pages de propriétés, sélectionnez la page de propriétés d’analyse>du code général des propriétés>de configuration.

  3. Dans la liste déroulante Ensemble de règles, effectuez l’une des opérations suivantes :

    • Choisissez l’ensemble de règles que vous souhaitez personnaliser.

      - ou -

    • Choisissez <Parcourir...> pour spécifier un ensemble de règles existant qui n’est pas dans la liste.

  4. Choisissez Ouvrir pour afficher les règles dans l’éditeur du jeu de règles.

  1. Dans Explorateur de solutions, ouvrez le menu contextuel du projet, puis choisissez Propriétés.

  2. Dans la boîte de dialogue Pages de propriétés, sélectionnez la page de propriétés de configuration>Analyse>du code Microsoft.

  3. Dans la liste déroulante Règles actives, effectuez l’une des opérations suivantes :

    • Choisissez l’ensemble de règles que vous souhaitez personnaliser.

      - ou -

    • Choisissez <Parcourir...> pour spécifier un ensemble de règles existant qui n’est pas dans la liste.

  4. Choisissez Ouvrir pour afficher les règles dans l’éditeur du jeu de règles.

Pour modifier un jeu de règles dans l’éditeur du jeu de règles

  • Pour modifier le nom d’affichage de l’ensemble de règles, dans le menu Affichage , choisissez Fenêtre Propriétés. Entrez le nom complet dans la zone Nom. Notez que le nom d’affichage peut différer du nom de fichier.

  • Pour ajouter toutes les règles du groupe à un ensemble de règles personnalisé, sélectionnez la zone case activée du groupe. Pour supprimer toutes les règles du groupe, désactivez la zone case activée.

  • Pour ajouter une règle spécifique à l’ensemble de règles personnalisé, sélectionnez la zone case activée de la règle. Pour supprimer la règle de l’ensemble de règles, désactivez la zone case activée.

  • Pour modifier l’action effectuée lorsqu’une règle est violée dans une analyse de code, choisissez le champ Action de la règle, puis choisissez l’une des valeurs suivantes :

    Avertissement : génère un avertissement.

    Erreur : génère une erreur.

    Informations : génère un message.

    Aucun : désactive la règle. Cette action est identique à la suppression de la règle de l’ensemble de règles.

Pour regrouper, filtrer ou modifier les champs de l’éditeur de jeu de règles à l’aide de la barre d’outils de l’éditeur du jeu de règles

  • Pour développer les règles dans tous les groupes, choisissez Développer tout.

  • Pour réduire les règles de tous les groupes, choisissez Réduire tout.

  • Pour modifier le champ par lequel les règles sont regroupées, choisissez le champ dans la liste Group By . Pour afficher les règles non groupées, choisissez <Aucun>.

  • Pour ajouter ou supprimer des champs dans les colonnes de règle, choisissez Options de colonne.

  • Pour masquer les règles qui ne s’appliquent pas à la solution actuelle, choisissez Masquer les règles qui ne s’appliquent pas à la solution actuelle.

  • Pour basculer entre l’affichage et le masquage des règles affectées à l’action Erreur, choisissez Afficher les règles qui peuvent générer des erreurs d’analyse du code.

  • Pour basculer entre l’affichage et le masquage des règles affectées à l’action Avertissement, choisissez Afficher les règles qui peuvent générer des avertissements d’analyse du code.

  • Pour basculer entre l’affichage et le masquage des règles affectées à l’action None , choisissez Afficher les règles qui ne sont pas activées.

  • Pour ajouter ou supprimer des ensembles de règles par défaut Microsoft dans l’ensemble de règles actuel, choisissez Ajouter ou supprimer des jeux de règles enfants.

Pour créer un ensemble de règles dans un éditeur de texte

Vous pouvez créer un ensemble de règles personnalisé dans un éditeur de texte, le stocker à n’importe quel emplacement avec une .ruleset extension et l’appliquer avec l’option du /analyze:ruleset compilateur.

L’exemple suivant montre un fichier de jeu de règles de base que vous pouvez utiliser comme point de départ :

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description="New rules to apply." ToolsVersion="10.0">
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6001" Action="Warning" />
    <Rule Id="C26494" Action="Warning" />
  </Rules>
</RuleSet>

Schéma d’ensemble de règles

Le schéma de jeu de règles suivant décrit le schéma XML d’un fichier d’ensemble de règles. Le schéma du jeu de règles est stocké dans %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Schemas\RuleSet.xsd. Vous pouvez l’utiliser pour créer vos propres ensembles de règles par programmation ou pour vérifier si vos ensembles de règles personnalisés respectent le format approprié. Pour plus d’informations, consultez Guide pratique pour créer un document XML basé sur un schéma XSD.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:annotation>
    <xs:documentation xml:lang="en">
            Visual Studio Code Analysis Rule Set Schema Definition Language.
            Copyright (c) Microsoft Corporation. All rights reserved.
        </xs:documentation>
  </xs:annotation>

  <!-- Every time this file changes, be sure to change the Validate method for the corresponding object in the code -->

  <xs:element name="RuleSet" type="TRuleSet">
  </xs:element>

  <xs:complexType name="TLocalization">
    <xs:all>
      <xs:element name="Name" type="TName" minOccurs="0" maxOccurs="1" />
      <xs:element name="Description" type="TDescription" minOccurs="0" maxOccurs="1" />
    </xs:all>
    <xs:attribute name="ResourceAssembly" type="TNonEmptyString" use="required" />
    <xs:attribute name="ResourceBaseName" type="TNonEmptyString" use="required" />
  </xs:complexType>

  <xs:complexType name="TRuleHintPaths">
    <xs:sequence>
      <xs:element name="Path" type="TNonEmptyString" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="TName">
    <xs:attribute name="Resource" type="TNonEmptyString" use="required" />
  </xs:complexType>

  <xs:complexType name="TDescription">
    <xs:attribute name="Resource" type="TNonEmptyString" use="required" />
  </xs:complexType>

  <xs:complexType name="TInclude">
    <xs:attribute name="Path" type="TNonEmptyString" use="required" />
    <xs:attribute name="Action" type="TIncludeAction" use="required" />
  </xs:complexType>

  <xs:complexType name="TIncludeAll">
    <xs:attribute name="Action" type="TIncludeAllAction" use="required" />
  </xs:complexType>

  <xs:complexType name="TRule">
    <xs:attribute name="Id" type="TNonEmptyString" use="required" />
    <xs:attribute name="Action" type="TRuleAction" use="required" />
  </xs:complexType>

  <xs:complexType name="TRules">
    <xs:sequence>
      <xs:element name="Rule" type="TRule" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="AnalyzerId" type="TNonEmptyString" use="required" />
    <xs:attribute name="RuleNamespace" type="TNonEmptyString" use="required" />
  </xs:complexType>

  <xs:complexType name="TRuleSet">
    <xs:sequence minOccurs="0" maxOccurs="1">
      <xs:element name="Localization" type="TLocalization" minOccurs="0" maxOccurs="1" />
      <xs:element name="RuleHintPaths" type="TRuleHintPaths" minOccurs="0" maxOccurs="1" />
      <xs:element name="IncludeAll" type="TIncludeAll" minOccurs="0" maxOccurs="1" />
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Include" type="TInclude" minOccurs="0" maxOccurs="unbounded" />
        <xs:element name="Rules" type="TRules" minOccurs="0" maxOccurs="unbounded">
          <xs:unique name="UniqueRuleName">
            <xs:selector xpath="Rule" />
            <xs:field xpath="@Id" />
          </xs:unique>
        </xs:element>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="Name" type="TNonEmptyString" use="required" />
    <xs:attribute name="Description" type="xs:string" use="optional" />
    <xs:attribute name="ToolsVersion" type="TNonEmptyString" use="required" />
  </xs:complexType>

  <xs:simpleType name="TRuleAction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Error"/>
      <xs:enumeration value="Warning"/>
      <xs:enumeration value="Info"/>
      <xs:enumeration value="Hidden"/>
      <xs:enumeration value="None"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TIncludeAction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Error"/>
      <xs:enumeration value="Warning"/>
      <xs:enumeration value="Info"/>
      <xs:enumeration value="Hidden"/>
      <xs:enumeration value="None"/>
      <xs:enumeration value="Default"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TIncludeAllAction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Error"/>
      <xs:enumeration value="Warning"/>
      <xs:enumeration value="Info"/>
      <xs:enumeration value="Hidden"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TNonEmptyString">
    <xs:restriction base="xs:string">
      <xs:minLength value="1" />
    </xs:restriction>
  </xs:simpleType>
  
</xs:schema>

Détails de l’élément de schéma :

Schema (élément) Description
TLocalization Informations de localisation, notamment le nom du fichier de jeu de règles, la description du fichier de jeu de règles, le nom de l’assembly de ressources contenant la ressource localisée et le nom de base de la ressource localisée
TRuleHintPaths Chemins d’accès aux fichiers utilisés comme indicateurs pour rechercher des fichiers d’ensemble de règles
TName Nom du fichier d’ensemble de règles actuel
TDescription Description du fichier d’ensemble de règles actuel
TInclude Chemin d’accès à un ensemble de règles inclus avec l’action de règle
TIncludeAll Action de règle pour toutes les règles
TRule ID de règle avec action de règle
TRules Collection d’une ou plusieurs règles
TRuleSet Format de fichier Ruleset composé d’informations de localisation, de chemins d’indicateur de règle, d’inclure toutes les informations, d’informations sur les règles, le nom, la description et les informations de version des outils
TRuleAction Énumération décrivant une action de règle telle qu’une erreur, un avertissement, des informations, des informations masquées ou aucune
TIncludeAction Énumération décrivant une action de règle telle qu’une erreur, un avertissement, des informations, des informations masquées, aucun ou par défaut
TIncludeAllAction Énumération décrivant une action de règle telle qu’une erreur, un avertissement, des informations ou masqué

Pour afficher un exemple d’ensemble de règles, consultez Pour créer un ensemble de règles dans un éditeur de texte ou l’un des ensembles de règles par défaut stockés dans %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.