Korzystanie z zestawów reguł do określania reguł C++ do uruchomienia

W programie Visual Studio można utworzyć i zmodyfikować niestandardowy zestaw reguł w celu spełnienia określonych potrzeb projektu skojarzonych z analizą kodu. Domyślne zestawy reguł są przechowywane w programie %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

Program Visual Studio 2017 w wersji 15.7 lub nowszej: można tworzyć niestandardowe zestawy reguł przy użyciu dowolnego edytora tekstów i stosować je w kompilacjach wiersza polecenia niezależnie od używanego systemu kompilacji. W celu uzyskania więcej informacji, zobacz następujący temat: /analyze:ruleset.

Aby utworzyć niestandardowy zestaw reguł języka C++ w programie Visual Studio, projekt C/C++ musi być otwarty w środowisku IDE programu Visual Studio. Następnie otwórz standardowy zestaw reguł w edytorze zestawu reguł, a następnie dodaj lub usuń określone reguły i opcjonalnie zmień akcję, która występuje, gdy analiza kodu określa naruszenie reguły.

Aby utworzyć nowy niestandardowy zestaw reguł, zapisz go przy użyciu nowej nazwy pliku. Niestandardowy zestaw reguł jest automatycznie przypisywany do projektu.

Aby utworzyć regułę niestandardową na podstawie jednego istniejącego zestawu reguł

  1. W Eksplorator rozwiązań otwórz menu skrótów dla projektu, a następnie wybierz pozycję Właściwości.

  2. W oknie dialogowym Strony właściwości wybierz stronę właściwości Właściwości>konfiguracji Analiza>kodu Ogólne.

  3. Na liście rozwijanej Zestaw reguł wykonaj jedną z następujących czynności:

    • Wybierz zestaw reguł, który chcesz dostosować.

      - lub -

    • Wybierz pozycję <Przeglądaj...,> aby określić istniejący zestaw reguł, który nie znajduje się na liście.

  4. Wybierz pozycję Otwórz, aby wyświetlić reguły w edytorze zestawu reguł.

  1. W Eksplorator rozwiązań otwórz menu skrótów dla projektu, a następnie wybierz pozycję Właściwości.

  2. W oknie dialogowym Strony właściwości wybierz stronę właściwości Właściwości>konfiguracji Analiza>kodu firmy Microsoft.

  3. Na liście rozwijanej Aktywne reguły wykonaj jedną z następujących czynności:

    • Wybierz zestaw reguł, który chcesz dostosować.

      - lub -

    • Wybierz pozycję <Przeglądaj...,> aby określić istniejący zestaw reguł, który nie znajduje się na liście.

  4. Wybierz pozycję Otwórz, aby wyświetlić reguły w edytorze zestawu reguł.

Aby zmodyfikować zestaw reguł w edytorze zestawu reguł

  • Aby zmienić nazwę wyświetlaną zestawu reguł, w menu Widok wybierz pozycję Okno właściwości. Wprowadź nazwę wyświetlaną w polu Nazwa . Zwróć uwagę, że nazwa wyświetlana może się różnić od nazwy pliku.

  • Aby dodać wszystkie reguły grupy do niestandardowego zestawu reguł, zaznacz pole wyboru grupy. Aby usunąć wszystkie reguły grupy, wyczyść pole wyboru.

  • Aby dodać konkretną regułę do niestandardowego zestawu reguł, zaznacz pole wyboru reguły. Aby usunąć regułę z zestawu reguł, wyczyść pole wyboru.

  • Aby zmienić akcję wykonywaną w przypadku naruszenia reguły w analizie kodu, wybierz pole Akcja dla reguły, a następnie wybierz jedną z następujących wartości:

    Ostrzeżenie — generuje ostrzeżenie.

    Błąd — generuje błąd.

    Informacje — generuje komunikat.

    Brak — wyłącza regułę. Ta akcja jest taka sama jak usunięcie reguły z zestawu reguł.

Aby grupować, filtrować lub zmieniać pola w edytorze zestawu reguł przy użyciu paska narzędzi edytora zestawu reguł

  • Aby rozwinąć reguły we wszystkich grupach, wybierz pozycję Rozwiń wszystko.

  • Aby zwinąć reguły we wszystkich grupach, wybierz pozycję Zwiń wszystko.

  • Aby zmienić pole, według którego są pogrupowane reguły, wybierz pole z listy Grupuj według . Aby wyświetlić reguły niezgrupowane, wybierz pozycję <Brak>.

  • Aby dodać lub usunąć pola w kolumnach reguł, wybierz pozycję Opcje kolumny.

  • Aby ukryć reguły, które nie mają zastosowania do bieżącego rozwiązania, wybierz pozycję Ukryj reguły, które nie mają zastosowania do bieżącego rozwiązania.

  • Aby przełączać się między pokazywaniem i ukrywaniem reguł przypisanych do akcji Błąd, wybierz pozycję Pokaż reguły, które mogą generować błędy analizy kodu.

  • Aby przełączać się między pokazywaniem i ukrywaniem reguł przypisanych do akcji Ostrzeżenie, wybierz pozycję Pokaż reguły, które mogą generować ostrzeżenia analizy kodu.

  • Aby przełączać się między pokazywaniem i ukrywaniem reguł przypisanych do akcji Brak , wybierz pozycję Pokaż reguły, które nie są włączone.

  • Aby dodać lub usunąć domyślne zestawy reguł firmy Microsoft do bieżącego zestawu reguł, wybierz pozycję Dodaj lub usuń podrzędne zestawy reguł.

Aby utworzyć zestaw reguł w edytorze tekstów

Niestandardowy zestaw reguł można utworzyć w edytorze tekstów, zapisać go w dowolnej lokalizacji z .ruleset rozszerzeniem i zastosować za pomocą opcji kompilatora /analyze:ruleset .

W poniższym przykładzie przedstawiono podstawowy plik zestawu reguł, którego można użyć jako punktu początkowego:

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

Schemat zestawu reguł

Poniższy schemat zestawu reguł opisuje schemat XML pliku zestawu reguł. Schemat zestawu reguł jest przechowywany w pliku %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Schemas\RuleSet.xsd. Można go użyć do programowego tworzenia własnych zestawów reguł lub sprawdzania, czy niestandardowe zestawy reguł są zgodne z poprawnym formatem. Aby uzyskać więcej informacji, zobacz How to: Create an XML document based on an XSD schema (Instrukcje: tworzenie dokumentu XML na podstawie schematu 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>

Szczegóły elementu schematu:

Element schematu opis
TLocalization Informacje o lokalizacji, w tym nazwa pliku zestawu reguł, opis pliku zestawu reguł, nazwa zestawu zasobów zawierającego zlokalizowany zasób i nazwa podstawowa zlokalizowanego zasobu
TRuleHintPaths Ścieżki plików używane jako wskazówki dotyczące wyszukiwania plików zestawu reguł
TName Nazwa bieżącego pliku zestawu reguł
TDescription Opis bieżącego pliku zestawu reguł
TInclude Ścieżka do dołączonego zestawu reguł z akcją reguły
TIncludeAll Akcja reguły dla wszystkich reguł
TRule Identyfikator reguły z akcją reguły
TRules Kolekcja co najmniej jednej reguły
TRuleSet Format pliku zestawu reguł składający się z informacji o lokalizacji, ścieżek wskazówek reguły, dołączania wszystkich informacji, dołączania informacji, informacji o regułach, nazwy, opisu i informacji o wersji narzędzi
TRuleAction Wyliczenie opisujące akcję reguły, taką jak błąd, ostrzeżenie, informacje, ukryte lub brak
TIncludeAction Wyliczenie opisujące akcję reguły, taką jak błąd, ostrzeżenie, informacje, ukryte, brak lub wartość domyślna
TIncludeAllAction Wyliczenie opisujące akcję reguły, taką jak błąd, ostrzeżenie, informacje lub ukryte

Aby wyświetlić przykład zestawu reguł, zobacz Aby utworzyć zestaw reguł w edytorze tekstów lub dowolny z domyślnych zestawów reguł przechowywanych w %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Setsprogramie .