Megosztás a következőn keresztül:


A futtatandó C++ szabályok megadása szabálykészletekkel

A Visual Studióban létrehozhat és módosíthat egy egyéni szabálykészletet , amely megfelel a kódelemzéshez kapcsolódó konkrét projektigényeknek. Az alapértelmezett szabálykészletek a következő helyen vannak tárolva %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets: .

Visual Studio 2017 15.7-es és újabb verzió: Bármilyen szövegszerkesztővel létrehozhat egyéni szabálykészleteket, és a parancssori buildekben alkalmazhatja őket, függetlenül attól, hogy milyen buildrendszert használ. További információért lásd /analyze:ruleset.

Ha egyéni C++ szabálykészletet szeretne létrehozni a Visual Studióban, egy C/C++ projektnek nyitva kell lennie a Visual Studio IDE-ben. Ezután megnyit egy standard szabálykészletet a szabálykészlet-szerkesztőben, majd hozzáadhat vagy eltávolíthat bizonyos szabályokat, és tetszés szerint módosíthatja azt a műveletet, amely akkor fordul elő, amikor a kódelemzés megállapítja, hogy egy szabályt megsértett.

Új egyéni szabálykészlet létrehozásához mentse azt egy új fájlnév használatával. Az egyéni szabálykészlet automatikusan hozzá lesz rendelve a projekthez.

Egyéni szabály létrehozása egyetlen meglévő szabálykészletből

  1. A Megoldáskezelőben nyissa meg a projekt helyi menüjét, majd válassza a Tulajdonságok lehetőséget.

  2. A Tulajdonságlapok párbeszédpanelen válassza a Configuration Properties>Code Analysis>General tulajdonságlapot.

  3. A Szabálykészlet legördülő listában tegye az alábbiak egyikét:

    • Válassza ki a testre szabni kívánt szabálykészletet.

      -vagy-

    • Válassza a <Tallózás lehetőséget,> ha olyan meglévő szabálykészletet szeretne megadni, amely nem szerepel a listában.

  4. Válassza a Megnyitás lehetőséget a szabályok a szabálykészlet-szerkesztőben való megjelenítéséhez.

  1. A Megoldáskezelőben nyissa meg a projekt helyi menüjét, majd válassza a Tulajdonságok lehetőséget.

  2. A Tulajdonságlapok párbeszédpanelen válassza a Configuration Properties>Code Analysis>Microsoft tulajdonságlapját.

  3. Az Aktív szabályok legördülő listában tegye az alábbiak egyikét:

    • Válassza ki a testre szabni kívánt szabálykészletet.

      -vagy-

    • Válassza a <Tallózás lehetőséget,> ha olyan meglévő szabálykészletet szeretne megadni, amely nem szerepel a listában.

  4. Válassza a Megnyitás lehetőséget a szabályok a szabálykészlet-szerkesztőben való megjelenítéséhez.

Szabálykészlet módosítása a szabálykészlet-szerkesztőben

  • A szabálykészlet megjelenítendő nevének módosításához válassza a Nézet menü Tulajdonságok ablakát. Írja be a megjelenítendő nevet a Név mezőbe. Figyelje meg, hogy a megjelenített név eltérhet a fájl nevétől.

  • Ha a csoport összes szabályát hozzá szeretné adni egy egyéni szabálykészlethez, jelölje be a csoport jelölőnégyzetét. A csoport összes szabályának eltávolításához törölje a jelet a jelölőnégyzetből.

  • Ha egy adott szabályt szeretne hozzáadni az egyéni szabálykészlethez, jelölje be a szabály jelölőnégyzetét. Ha el szeretné távolítani a szabályt a szabálykészletből, törölje a jelet a jelölőnégyzetből.

  • Ha módosítani szeretné a szabály megszegésekor végrehajtott műveletet egy kódelemzésben, válassza ki a szabály Művelet mezőjét, majd válasszon az alábbi értékek közül:

    Figyelmeztetés – figyelmeztetést hoz létre.

    Hiba – hibát okoz.

    Információ – üzenetet hoz létre.

    Nincs – letiltja a szabályt. Ez a művelet ugyanaz, mint a szabály eltávolítása a szabálykészletből.

A szabálykészlet-szerkesztőben lévő mezők csoportosításához, szűréséhez vagy módosításához használja a szabálykészlet-szerkesztő eszköztárát

  • Ha az összes csoportban ki szeretné bontani a szabályokat, válassza az Összes kibontása lehetőséget.

  • Az összes csoport szabályainak összecsukásához válassza az Összes összecsukása lehetőséget.

  • A szabályok szerint csoportosított mező módosításához válassza ki a mezőt a Csoportosítási lista alapján . A nem csoportosított szabályok megjelenítéséhez válassza a Nincs< lehetőséget>.

  • A szabályoszlopok mezőinek hozzáadásához vagy eltávolításához válassza az Oszlopbeállítások lehetőséget.

  • Az aktuális megoldásra nem érvényes szabályok elrejtéséhez válassza az Aktuális megoldásra nem érvényes szabályok elrejtése lehetőséget.

  • A hibaművelethez hozzárendelt szabályok megjelenítése és elrejtése közötti váltáshoz válassza a Kódelemzési hibákat generáló szabályok megjelenítése lehetőséget.

  • A Figyelmeztetés művelethez hozzárendelt szabályok megjelenítése és elrejtése közötti váltáshoz válassza a Kódelemzési figyelmeztetéseket generáló szabályok megjelenítése lehetőséget.

  • Ha váltani szeretne a Nincs művelethez rendelt szabályok megjelenítése és elrejtése között, válassza a Nem engedélyezett szabályok megjelenítése lehetőséget.

  • A Microsoft alapértelmezett szabálykészleteinek az aktuális szabálykészlethez való hozzáadásához vagy eltávolításához válassza a Gyermekszabály-csoportok hozzáadása vagy eltávolítása lehetőséget.

Szabálykészlet létrehozása szövegszerkesztőben

Létrehozhat egy egyéni szabálykészletet egy szövegszerkesztőben, és az elmenthető bármely helyre .ruleset kiterjesztéssel, valamint alkalmazható a /analyze:ruleset fordítói opcióval.

Az alábbi példa egy alapszintű szabálykészletfájlt mutat be, amelyet kiindulási pontként használhat:

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

Szabálykészletséma

Az alábbi szabálykészletséma egy szabálykészletfájl XML-sémáját ismerteti. A szabálykészlet sémája a következő helyen van tárolva %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Schemas\RuleSet.xsd: . Segítségével programozott módon készíthet saját szabálykészleteket, vagy ellenőrizheti, hogy az egyéni szabálykészletek megfelelnek-e a megfelelő formátumnak. További információ : Útmutató: XML-dokumentum létrehozása XSD-séma alapján.

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

Sémaelem részletei:

Sémaelem Leírás
TLocalization Honosítási információk, beleértve a szabálykészletfájl nevét, a szabálykészletfájl leírását, a honosított erőforrást tartalmazó erőforrás-szerelvény nevét és a honosított erőforrás alapnevét
TRuleHintPaths A szabálykészletfájlok keresésére szolgáló tippekként használt fájlelérési utak
TName Az aktuális szabálykészletfájl neve
TDescription Az aktuális szabálykészletfájl leírása
TInclude Belefoglalt szabálykészlet elérési útja szabályművelettel
TIncludeAll Szabályművelet az összes szabályhoz
TRule Szabályazonosító szabályművelettel
TRules Egy vagy több szabály gyűjteménye
TRuleSet A szabálykészlet fájlformátuma, amely a honosítási információkból, a szabálymutatók elérési útjaiból, az összes információból, a szabályok adataiból, a névből, a leírásból és az eszközök verzióadataiból áll
TRuleAction Szabályműveletet leíró enumerálás, például hiba, figyelmeztetés, információ, rejtett vagy nincs
TIncludeAction Szabályműveletet leíró enumerálás, például hiba, figyelmeztetés, információ, rejtett, nincs vagy alapértelmezett
TIncludeAllAction Szabályműveletet leíró enumerálás, például hiba, figyelmeztetés, információ vagy rejtett

Ha egy szabálykészletre szeretne példát látni, olvassa el a Szabálykészlet létrehozása szövegszerkesztőben vagy a benne tárolt %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Setsalapértelmezett szabálykészletek bármelyikét.