Dela via


Använd regeluppsättningar för att ange vilka C++-regler som ska köras

I Visual Studio kan du skapa och ändra en anpassad regeluppsättning för att uppfylla specifika projektbehov som är associerade med kodanalys. Standardregeluppsättningarna lagras i %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

Visual Studio 2017 version 15.7 och senare: Du kan skapa anpassade regeluppsättningar med valfri textredigerare och tillämpa dem i kommandoradsversioner oavsett vilket byggsystem du använder. Mer information finns i /analyze:ruleset.

Om du vill skapa en anpassad C++-regeluppsättning i Visual Studio måste ett C/C++-projekt vara öppet i Visual Studio IDE. Sedan öppnar du en standardregeluppsättning i regeluppsättningsredigeraren och lägger sedan till eller tar bort specifika regler och kan också ändra den åtgärd som inträffar när kodanalysen fastställer att en regel har brutits.

Om du vill skapa en ny anpassad regeluppsättning sparar du den med hjälp av ett nytt filnamn. Den anpassade regeluppsättningen tilldelas automatiskt till projektet.

Skapa en anpassad regel från en enda befintlig regeluppsättning

  1. Öppna snabbmenyn för projektet i Solution Explorer och välj sedan Egenskaper.

  2. I dialogrutan Egenskapssidor väljer du egenskapssidan Konfigurationsegenskaper>Kodanalys>Allmän egenskap.

  3. Gör något av följande i listrutan Regeluppsättning :

    • Välj den regeluppsättning som du vill anpassa.

      -eller-

    • Välj <Bläddra...> för att ange en befintlig regeluppsättning som inte finns i listan.

  4. Välj Öppna för att visa reglerna i regeluppsättningsredigeraren.

  1. Öppna snabbmenyn för projektet i Solution Explorer och välj sedan Egenskaper.

  2. I dialogrutan Egenskapssidor väljer du egenskapssidan Konfigurationsegenskaper>Kodanalys>För Microsoft .

  3. Gör något av följande i listrutan Aktiva regler :

    • Välj den regeluppsättning som du vill anpassa.

      -eller-

    • Välj <Bläddra...> för att ange en befintlig regeluppsättning som inte finns i listan.

  4. Välj Öppna för att visa reglerna i regeluppsättningsredigeraren.

Ändra en regeluppsättning i regeluppsättningsredigeraren

  • Om du vill ändra visningsnamnet för regeluppsättningen går du till menyn Visa och väljer Egenskapsfönster. Ange visningsnamnet i rutan Namn . Observera att visningsnamnet kan skilja sig från filnamnet.

  • Om du vill lägga till alla regler för gruppen i en anpassad regeluppsättning markerar du kryssrutan för gruppen. Om du vill ta bort alla regler i gruppen avmarkerar du kryssrutan.

  • Om du vill lägga till en specifik regel i den anpassade regeluppsättningen markerar du kryssrutan för regeln. Om du vill ta bort regeln från regeluppsättningen avmarkerar du kryssrutan.

  • Om du vill ändra den åtgärd som vidtas när en regel överträds i en kodanalys väljer du fältet Åtgärd för regeln och väljer sedan något av följande värden:

    Varning – genererar en varning.

    Fel – genererar ett fel.

    Info – genererar ett meddelande.

    Ingen – inaktiverar regeln. Den här åtgärden är samma som att ta bort regeln från regeluppsättningen.

Gruppera, filtrera eller ändra fälten i regeluppsättningsredigeraren med hjälp av verktygsfältet för regeluppsättningsredigeraren

  • Om du vill expandera reglerna i alla grupper väljer du Expandera alla.

  • Om du vill dölja reglerna i alla grupper väljer du Dölj alla.

  • Om du vill ändra det fält som reglerna grupperas efter väljer du fältet i listan Gruppera efter. Om du vill visa reglerna ogrupperade väljer du <Ingen>.

  • Om du vill lägga till eller ta bort fält i regelkolumner väljer du Kolumnalternativ.

  • Om du vill dölja regler som inte gäller för den aktuella lösningen väljer du Dölj regler som inte gäller för den aktuella lösningen.

  • Om du vill växla mellan att visa och dölja regler som har tilldelats åtgärden Fel väljer du Visa regler som kan generera kodanalysfel.

  • Om du vill växla mellan att visa och dölja regler som har tilldelats åtgärden Varning väljer du Visa regler som kan generera kodanalysvarningar.

  • Om du vill växla mellan att visa och dölja regler som har tilldelats åtgärden Ingen väljer du Visa regler som inte är aktiverade.

  • Om du vill lägga till eller ta bort Microsofts standardregeluppsättningar i den aktuella regeluppsättningen väljer du Lägg till eller ta bort underordnade regeluppsättningar.

Skapa en regeluppsättning i en textredigerare

Du kan skapa en anpassad regeluppsättning i en textredigerare, lagra den på valfri plats med ett .ruleset tillägg och använda med kompilatoralternativet /analyze:ruleset .

I följande exempel visas en grundläggande regeluppsättningsfil som du kan använda som utgångspunkt:

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

Regeluppsättningsschema

Följande regeluppsättningsschema beskriver XML-schemat för en regeluppsättningsfil. Regeluppsättningsschemat lagras i %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Schemas\RuleSet.xsd. Du kan använda den för att skapa egna regeluppsättningar programmatiskt eller för att verifiera om dina anpassade regeluppsättningar följer rätt format. Mer information finns i Så här skapar du ett XML-dokument baserat på ett XSD-schema.

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

Information om schemaelement:

Schemaelement Beskrivning
TLocalization Lokaliseringsinformation inklusive namnet på regeluppsättningsfilen, beskrivning av regeluppsättningsfilen, namnet på resurssammansättningen som innehåller den lokaliserade resursen och basnamnet för den lokaliserade resursen
TRuleHintPaths Filsökvägar som används som tips för att söka efter regelsetfiler
TName Namnet på den aktuella regeluppsättningsfilen
TDescription Beskrivning av den nuvarande regeluppsättningsfilen
TInclude Sökväg till en inkluderad regeluppsättning med regelåtgärd
TIncludeAll Regelåtgärd för alla regler
TRule Regel-ID med regelåtgärd
TRules Samling av en eller flera regler
TRuleSet Regeluppsättningsfilformat som består av lokaliseringsinformation, sökvägar för regeltips, all inkluderad information, inkluderad information, regelinformation, namn, beskrivning och versionsinformation för verktyg.
TRuleAction Uppräkning som beskriver en regelåtgärd, till exempel ett fel, en varning, information, dold eller ingen
TIncludeAction Uppräkning som beskriver en regelåtgärd, till exempel ett fel, en varning, information, dold, ingen eller standard
TIncludeAllAction Uppräkning som beskriver en regelåtgärd, till exempel fel, varning, information eller dold

Ett exempel på en regeluppsättning finns i Skapa en regeluppsättning i en textredigerare eller någon av standardregleruppsättningarna som lagras i %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.