Condividi tramite


Usare set di regole per specificare le regole C++ da eseguire

In Visual Studio è possibile creare e modificare un set di regole personalizzato per soddisfare specifiche esigenze di progetto associate all'analisi del codice. I set di regole predefiniti vengono archiviati in %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

Visual Studio 2017 versione 15.7 e successive: è possibile creare set di regole personalizzati usando qualsiasi editor di testo e applicarli nelle compilazioni della riga di comando indipendentemente dal sistema di compilazione in uso. Per ulteriori informazioni, vedere /analyze:ruleset.

Per creare un set di regole C++ personalizzato in Visual Studio, è necessario aprire un progetto C/C++ nell'IDE di Visual Studio. Aprire quindi un set di regole standard nell'editor del set di regole e quindi aggiungere o rimuovere regole specifiche e, facoltativamente, modificare l'azione che si verifica quando l'analisi del codice determina che una regola è stata violata.

Per creare un nuovo set di regole personalizzato, salvarlo usando un nuovo nome file. Il set di regole personalizzato viene assegnato automaticamente al progetto.

Per creare una regola personalizzata da un singolo set di regole esistente

  1. In Esplora soluzioni aprire il menu di scelta rapida per il progetto e quindi scegliere Proprietà.

  2. Nella finestra di dialogo Pagine delle proprietà selezionare la pagina delle proprietà Proprietà>di configurazione Analisi>codice Generale.

  3. Nell'elenco a discesa Set di regole eseguire una delle operazioni seguenti:

    • Scegliere il set di regole da personalizzare.

      o

    • Scegliere <Sfoglia per> specificare un set di regole esistente che non si trova nell'elenco.

  4. Scegliere Apri per visualizzare le regole nell'editor del set di regole.

  1. In Esplora soluzioni aprire il menu di scelta rapida per il progetto e quindi scegliere Proprietà.

  2. Nella finestra di dialogo Pagine delle proprietà selezionare la pagina delle proprietà Proprietà>di configurazione Analisi>codice Microsoft.

  3. Nell'elenco a discesa Regole attive eseguire una delle operazioni seguenti:

    • Scegliere il set di regole da personalizzare.

      o

    • Scegliere <Sfoglia per> specificare un set di regole esistente che non si trova nell'elenco.

  4. Scegliere Apri per visualizzare le regole nell'editor del set di regole.

Per modificare un set di regole nell'editor del set di regole

  • Per modificare il nome visualizzato del set di regole, scegliere Finestra proprietà dal menu Visualizza. Immettere il nome visualizzato nella casella Nome . Si noti che il nome visualizzato può essere diverso dal nome del file.

  • Per aggiungere tutte le regole del gruppo a un set di regole personalizzato, selezionare la casella di controllo del gruppo. Per rimuovere tutte le regole del gruppo, deselezionare la casella di controllo.

  • Per aggiungere una regola specifica al set di regole personalizzato, selezionare la casella di controllo della regola. Per rimuovere la regola dal set di regole, deselezionare la casella di controllo.

  • Per modificare l'azione eseguita quando una regola viene violata in un'analisi del codice, scegliere il campo Azione per la regola e quindi scegliere uno dei valori seguenti:

    Avviso : genera un avviso.

    Errore : genera un errore.

    Info : genera un messaggio.

    Nessuno: disabilita la regola. Questa azione equivale alla rimozione della regola dal set di regole.

Per raggruppare, filtrare o modificare i campi nell'editor del set di regole tramite la barra degli strumenti dell'editor del set di regole

  • Per espandere le regole in tutti i gruppi, scegliere Espandi tutto.

  • Per comprimere le regole in tutti i gruppi, scegliere Comprimi tutto.

  • Per modificare il campo in base al quale le regole sono raggruppate, scegliere il campo dall'elenco Raggruppa per . Per visualizzare> le regole non raggruppate, scegliere <Nessuno.

  • Per aggiungere o rimuovere campi nelle colonne delle regole, scegliere Opzioni colonna.

  • Per nascondere le regole che non si applicano alla soluzione corrente, scegliere Nascondi regole che non si applicano alla soluzione corrente.

  • Per passare dalla visualizzazione alle regole nascoste assegnate all'azione Errore, scegliere Mostra regole che possono generare errori di analisi del codice.

  • Per passare dalla visualizzazione alle regole che vengono assegnate all'azione Avviso, scegliere Mostra regole che possono generare avvisi di analisi del codice.

  • Per passare dalla visualizzazione alle regole nascoste assegnate all'azione Nessuno, scegliere Mostra regole non abilitate.

  • Per aggiungere o rimuovere i set di regole predefiniti di Microsoft sul set di regole corrente, scegliere Aggiungi o rimuovi set di regole figlio.

Per creare un set di regole in un editor di testo

È possibile creare un set di regole personalizzato in un editor di testo, archiviarlo in qualsiasi posizione con un'estensione .ruleset e applicarlo con l'opzione del /analyze:ruleset compilatore.

L'esempio seguente illustra un file del set di regole di base che è possibile usare come punto di partenza:

<?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>

Schema del set di regole

Lo schema del set di regole seguente descrive lo schema XML di un file del set di regole. Lo schema del set di regole viene archiviato in %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Schemas\RuleSet.xsd. È possibile usarlo per creare set di regole personalizzati a livello di codice o per verificare se i set di regole personalizzati rispettano il formato corretto. Per altre informazioni, vedere Procedura: Creare un documento XML basato su uno schema 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>

Dettagli dell'elemento dello schema:

Schema - elemento Descrizione
TLocalization Informazioni di localizzazione, tra cui il nome del file del set di regole, la descrizione del file del set di regole, il nome dell'assembly di risorse contenente la risorsa localizzata e il nome di base della risorsa localizzata
TRuleHintPaths Percorsi di file usati come hint per cercare i file del set di regole
TName Nome del file del set di regole corrente
TDescription Descrizione del file del set di regole corrente
TInclude Percorso di un set di regole incluso con azione regola
TIncludeAll Azione regola per tutte le regole
TRule ID regola con azione regola
TRules Raccolta di una o più regole
TRuleSet Formato di file del set di regole costituito da informazioni di localizzazione, percorsi hint regola, includono tutte le informazioni, includono informazioni, informazioni sulle regole, nome, descrizione e informazioni sulla versione degli strumenti
TRuleAction Enumerazione che descrive un'azione della regola, ad esempio un errore, un avviso, informazioni, nascoste o nessuna
TIncludeAction Enumerazione che descrive un'azione della regola, ad esempio un errore, un avviso, informazioni, nascoste, none o impostazione predefinita
TIncludeAllAction Enumerazione che descrive un'azione della regola, ad esempio un errore, un avviso, informazioni o nascosti

Per un esempio di set di regole, vedere Per creare un set di regole in un editor di testo o uno dei set di regole predefiniti archiviati in %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.