Sdílet prostřednictvím


Potlačení porušení analýzy kódu

Pokud při vytváření kódu spolupracujete s týmem, je často užitečné označit, že upozornění není použitelné. Potlačení porušení analýzy kódu značí členům týmu, že byl kód zkontrolován, a upozornění lze potlačit. Následující části popisují různé způsoby potlačení porušení analýzy kódu pomocí integrovaného vývojového prostředí sady Visual Studio.

Potlačení porušení pomocí souboru EditorConfig

V souboru EditorConfig pro vaše řešení nebo projekt přidejte položku pro každé pravidlo, které chcete konfigurovat, a nastavte jeho závažnost na none. Například dotnet_diagnostic.CA1822.severity = none. Další informace naleznete v tématu Ruční konfigurace závažnosti pravidla v souboru EditorConfig. Pokud chcete přidat soubor EditorConfig, přečtěte si téma Přidání souboru EditorConfig do projektu.

Potlačení porušení ve zdrojovém kódu

Porušení ve zdrojovém kódu můžete potlačit pomocí direktivy preprocesoru, která potlačuje porušení určitého řádku kódu:

Nebo můžete použít atribut SuppressMessageAttribute k potlačení upozornění v kódu jazyka C# a Visual Basic.

Potlačení porušení pomocí editoru kódu

Chcete-li potlačit porušení pomocí editoru kódu, postupujte takto:

  1. Umístěte kurzor na řádek kódu s porušením a stisknutím kombinace kláves Ctrl+Period (.) nebo Alt+Enter otevřete nabídku Rychlé akce.

  2. Vyberte Potlačit nebo konfigurovat problémy>Potlačit <číslo> pravidla a pak zvolte buď ve zdroji, nebo ve zdroji (atributu).

    • Pokud se rozhodnete ve zdroji, zobrazí se náhled direktivy preprocesoru přidané do kódu.

      Snímek obrazovky znázorňující výběr zdroje z nabídky Rychlé akce potlačit

    • Pokud se rozhodnete ve zdroji (atributu), zobrazí se náhled atributu SuppressMessageAttribute přidaného do kódu.

      Snímek obrazovky znázorňující výběr zdroje (atributu) z nabídky Rychlé akce Potlačit

Potlačení porušení pomocí seznamu chyb

Chcete-li potlačit porušení pomocí okna Seznam chyb, postupujte takto:

  1. V okně Seznam chyb vyberte pravidla, která chcete potlačit.

  2. Klikněte pravým tlačítkem myši a pak vyberte Potlačit>ve zdroji.

    Otevře se dialogové okno Náhled změn a zobrazí náhled direktivy upozornění jazyka C# #pragma nebo direktivy upozornění jazyka Visual Basic #Disable přidané do zdrojového kódu.

    Snímek obrazovky s dialogovým oknem Náhled změn pro přidání upozornění #pragma v souboru kódu

  3. Výběrem možnosti Použít uložte změny v souboru kódu.

Vyloučení diagnostiky sestavení seznamu chyb

Pokud v okně Seznam chyb nevidíte možnost Potlačit, pravděpodobně dojde k narušení sestavení a ne živé analýzy. V okně Seznam chyb se zobrazí diagnostika nebo porušení pravidel z živé analýzy kódu i sestavení. Vzhledem k tomu, že diagnostika sestavení může být zastaralá, například pokud jste upravili kód tak, aby opravili porušení, ale znovu ho znovu nevytvořili, nemůžete tyto diagnostiky vždy potlačit ze seznamu chyb.

Diagnostika z živé analýzy nebo Technologie IntelliSense je vždy aktuální s aktuálními zdroji a je možné ji vždy potlačit ze seznamu chyb. Pokud chcete z vašeho výběru vyloučit diagnostiku sestavení, postupujte takto:

  1. V rozevíracím seznamu filtru zdroje seznamu chyb změňte výběr z možnosti Sestavení + IntelliSense pouze na IntelliSense.

    Snímek obrazovky znázorňující filtr zdroje seznamu chyb

  2. Vyberte diagnostiku, kterou chcete potlačit, a pokračujte podle předchozího popisu.

Potlačení porušení pomocí globálního souboru potlačení

Globální soubor potlačení používá atribut SuppressMessageAttribute k potlačení porušení kódu.

Použití souboru globálního potlačení z editoru kódu

Chcete-li potlačit porušení souboru globálního potlačení pomocí editoru kódu, postupujte takto:

  1. V editoru kódu umístěte kurzor na řádek kódu s porušením a stisknutím kláves Ctrl+Period (.) nebo Alt+Enter otevřete nabídku Rychlé akce.

  2. Vyberte Potlačit <číslo> pravidla a pak zvolte v souboru potlačení.

    Visual Studio vytvoří v editoru kódu kartu obsahující nový soubor globálního potlačení.

Použití globálního souboru potlačení ze seznamu chyb

Chcete-li potlačit porušení souboru globálního potlačení pomocí okna Seznam chyb, postupujte takto:

  1. V okně Seznam chyb vyberte pravidla, která chcete potlačit.

  2. Klikněte pravým tlačítkem myši a pak vyberte Potlačit>v souboru potlačení.

    Otevře se dialogové okno Náhled změn a zobrazí náhled atributu SuppressMessageAttribute přidaného do souboru globálního potlačení.

    Snímek obrazovky znázorňující dialogové okno Náhled změn s atributem SuppressMessageAttribute v souboru potlačení

  3. Výběrem možnosti Použít uložíte soubor globálního potlačení.

Potlačení všech aktuálních porušení

Potlačení všech aktuálních porušení se někdy označuje jako základ. Chcete-li potlačit všechna aktuální porušení v řešení nebo projektu, postupujte takto:

  1. V řádku nabídek sady Visual Studio vyberte Analyzovat>sestavení a potlačit aktivní problémy.

  2. Pokud chcete potlačit porušení celého řešení, vyberte Možnost Pro řešení , nebo vyberte Pro <název> projektu potlačte porušení pouze pro váš projekt.

Potlačení porušení pomocí nastavení projektu

Chcete-li potlačit porušení pomocí nastavení projektu Průzkumník řešení, postupujte takto:

  1. V Průzkumník řešení vyberte projekt.

  2. Klikněte pravým tlačítkem myši a vyberte Vlastnosti (nebo stiskněte Alt +Enter).

  3. V okně Vlastnosti vyberte v levém podokně analýzu kódu a potom zrušte zaškrtnutí políčka Potlačit výsledky vygenerovaného kódu.

Potlačení porušení pomocí sady pravidel

V editoru sad pravidel zrušte zaškrtnutí políčka vedle názvu nebo nastavte akci na Hodnotu Žádná.

Potlačení ve zdroji a atribut SuppressMessageAttribute

Potlačení ve zdroji (ISS) používá SuppressMessageAttribute atribut k potlačení upozornění. Atribut můžete přidat SuppressMessageAttribute do zdrojového souboru poblíž segmentu kódu, který vygeneroval upozornění.

Atribut můžete buď zadat ručně v editoru kódu, nebo atribut přidat automaticky následujícím způsobem:

  1. V editoru kódu umístěte kurzor na řádek kódu s porušením a stisknutím kláves Ctrl+Period (.) nebo Alt+Enter otevřete nabídku Rychlé akce.

  2. V nabídce Rychlé akce vyberte Potlačit nebo konfigurovat problémy>Potlačit <číslo> pravidla.

  3. Proveďte jeden z následujících kroků:

    • Vyberte ve zdroji (atributu).

      Visual Studio přidá SuppressMessageAttribute do kódu atribut.

    • Vyberte v souboru potlačení.

      Visual Studio vytvoří v editoru kódu kartu obsahující nový soubor globálního potlačení s SuppressMessageAttribute atributy.

Atribut SuppressMessageAttribute je podmíněný atribut, který je součástí metadat sestavení spravovaného kódu. Tento atribut je zahrnut pouze v případě, že CODE_ANALYSIS je symbol kompilace definován v době kompilace.

Pouze v kódu jazyka C++ a rozhraní příkazového řádku přidejte atribut pomocí maker CA_SUPPRESS_MESSAGE nebo CA_GLOBAL_SUPPRESS_MESSAGE v souboru hlaviček.

Pokud migrujete projekt na nejnovější verzi sady Visual Studio, může se zobrazit velký počet upozornění analýzy kódu. Pokud nejste připraveni opravit upozornění, můžete je potlačit výběrem možnosti Analyzovat>sestavení a potlačit aktivní problémy.

Poznámka:

Nepoužívejte u buildů vydaných verzí potlačení v rámci zdroje, abyste zabránili náhodnému doručení metadat potlačení v rámci zdroje.

SuppressMessageAttribute – formát atributu

Atribut SuppressMessageAttribute má následující formát:

[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]

Mezi vlastnosti atributu patří:

  • Category: Kategorie pravidla. Další informace o kategoriích pravidel analýzy kódu najdete v tématu Pravidla kvality kódu.

  • CheckId: Identifikátor pravidla. Podpora obsahuje krátký i dlouhý název identifikátoru pravidla. Krátký název je CAXXXX; dlouhý název je CAXXXX:FriendlyTypeName.

  • Justification: Text použitý k zdokumentování důvodu potlačení zprávy.

  • MessageId: Jedinečný identifikátor problému pro každou zprávu.

  • Scope: Cíl, na kterém je upozornění potlačováno. Pokud cíl není zadaný, systém ho nastaví na cíl atributu. Mezi podporované obory patří:

    • module: Tento obor potlačí upozornění na sestavení. Jedná se o globální potlačení, které platí pro celý projekt.

    • resource: (Pouze starší verze FxCop ) Tento obor potlačí upozornění v diagnostických informacích zapsaných do souborů prostředků, které jsou součástí modulu (sestavení). Tento obor se v kompilátorech C#/VB nečte ani nerespektuje pro diagnostiku analyzátoru Roslyn, která analyzuje pouze zdrojové soubory.

    • type: Tento obor potlačí upozornění na typ.

    • member: Tento obor potlačí upozornění na člena.

    • namespace: Tento obor potlačí upozornění na samotný obor názvů. Nepotlačuje upozornění na typy v rámci oboru názvů.

    • namespaceanddescendants: (Vyžaduje kompilátor verze 3.x nebo vyšší a Visual Studio 2019 nebo novější) Tento obor potlačí upozornění v oboru názvů a všechny jeho potomky symboly. Starší analýza ignoruje namespaceanddescendants hodnotu.

  • Target: Identifikátor, který určuje cíl, na kterém je upozornění potlačeno. Musí obsahovat plně kvalifikovaný název komponenty.

Když se v sadě Visual Studio zobrazí upozornění, můžete zobrazit příklady SuppressMessageAttribute přidáním potlačení do globálního souboru potlačení. Atribut potlačení a jeho požadované vlastnosti se zobrazí v okně náhledu.

SuppressMessageAttribute usage

Upozornění analýzy kódu jsou potlačena na úrovni, na které SuppressMessageAttribute se atribut používá. Atribut lze například použít na úrovni sestavení, modulu, typu, člena nebo parametru. Účelem použití tohoto atributu je úzce spojit informace potlačení s kódem, ve kterém dojde k porušení.

Obecná forma potlačení zahrnuje kategorii pravidla a identifikátor pravidla, který obsahuje volitelnou čitelný reprezentaci názvu pravidla. Příklad:

[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]

Pokud existují přísné důvody výkonu pro minimalizaci metadat potlačení ve zdroji, název pravidla může být vynechán. Kategorie pravidla a id pravidla společně tvoří dostatečně jedinečný identifikátor pravidla. Příklad:

[SuppressMessage("Microsoft.Design", "CA1039")]

Z důvodu udržovatelnosti se nedoporučuje vynechat název pravidla.

Potlačení selektivních porušení v těle metody

Atributy potlačení lze použít u metody, ale nelze je vložit do těla metody. Pokud do metody přidáte SuppressMessageAttribute atribut, potlačí se všechna porušení konkrétního pravidla.

V některých případech můžete chtít potlačit konkrétní instanci porušení předpisů. Představte si příklad, kdy budoucí kód není automaticky vyloučený z pravidla analýzy kódu. Určitá pravidla analýzy kódu umožňují potlačit konkrétní instanci porušení pomocí MessageId vlastnosti atributu SuppressMessageAttribute . Obecně platí, že starší pravidla pro porušení konkrétního symbolu (místní proměnná nebo parametr) respektují MessageId vlastnost. CA1500:VariableNamesShouldNotMatchFieldNames je příkladem takového pravidla. Starší pravidla pro porušení spustitelného kódu (bez symbolu MessageId ) však nerespektují vlastnost. Analyzátory platformy .NET Compiler Platform (Roslyn) také nerespektují MessageId vlastnost.

Chcete-li potlačit konkrétní porušení pravidla, zadejte název symbolu MessageId vlastnosti atributu SuppressMessageAttribute . Následující příklad ukazuje kód se dvěma porušeními CA1500:VariableNamesShouldNotMatchFieldNames: jedno porušení name proměnné a jiné porušení proměnné age . Potlačuje se pouze porušení symbolu age .

public class Animal
{
    int age;
    string name;

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1500:VariableNamesShouldNotMatchFieldNames", MessageId = "age")]
    private void PrintInfo()
    {
        int age = 5;
        string name = "Charlie";

        Console.WriteLine($"Age {age}, Name {name}");
    }
}

Potlačení na globální úrovni

Nástroj pro analýzu spravovaného SuppressMessageAttribute kódu zkoumá atributy použité na úrovni sestavení, modulu, typu, člena nebo parametru. Odesílá také porušení prostředků a oborů názvů. Tato porušení musí být použita na globální úrovni a jsou vymezena a cílená. Například následující zpráva potlačí porušení oboru názvů:

[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]

Pro potlačení na globální úrovni:

  • Když potlačíte upozornění s oborem namespace , potlačí upozornění na samotný obor názvů. Nepotlačuje upozornění na typy v rámci oboru názvů.

  • Target vždy obsahuje plně kvalifikovaný název položky.

  • Jakékoli potlačení lze vyjádřit zadáním explicitního oboru. Tyto potlačení musí existovat na globální úrovni. Potlačení na úrovni člena nelze určit úpravou typu.

  • Potlačení na globální úrovni představují jediný způsob, jak potlačit zprávy, které odkazují na kód vygenerovaný kompilátorem, který se nemapuje na explicitně zadaný zdroj uživatele. Například následující kód potlačí porušení proti konstruktoru generovanému kompilátorem:

    [module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]

Globální soubor potlačení

Globální soubor potlačení udržuje potlačení, která jsou buď potlačení na globální úrovni, nebo potlačení, které nezadávají cíl. Například potlačení pro porušení na úrovni sestavení jsou uložena v tomto souboru. Některé potlačení ASP.NET jsou navíc uloženy v tomto souboru, protože nastavení na úrovni projektu nejsou k dispozici pro kód za formulářem. Visual Studio vytvoří a přidá do projektu soubor globálního potlačení při prvním výběru možnosti V souboru potlačení projektu v okně Seznam chyb.

Rozsah potlačení modulu

Porušení kvality kódu pro celé sestavení můžete potlačit pomocí module oboru.

Například následující atribut v souboru projektu GlobalSuppressions potlačí porušení KonfiguraceAwait pro projekt ASP.NET Core:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "ASP.NET Core doesn't use thread context to store request context.", Scope = "module")]

Vygenerovaný kód

Kompilátory spravovaného kódu a některé externí nástroje generují kód, který pomáhá rychle vyvíjet kód. Kód vygenerovaný kompilátorem, který se zobrazí ve zdrojových souborech, je označen atributem GeneratedCodeAttribute .

Pro analýzu zdrojového kódu můžete potlačit zprávy ve vygenerovaném kódu v souboru .editorconfig . Další informace naleznete v tématu Vyloučení generovaného kódu.

U starších verzí analýzy kódu můžete zvolit, jestli chcete potlačit upozornění analýzy kódu a chyby pro vygenerovaný kód. Informace o tom, jak potlačit taková upozornění a chyby, naleznete v tématu Potlačení upozornění analýzy kódu pro vygenerovaný kód.

Poznámka:

Analýza kódu ignoruje GeneratedCodeAttribute , když se použije na celé sestavení nebo na jeden parametr.