Přehled potlačování ve zdroji
Potlačení ve zdroji je schopnost potlačit nebo ignorovat porušení analýza kódu ve spravovaném kódu tak, že přidáte SuppressMessage atribut segmenty kódu, které způsobí, že tato porušení.SuppressMessage atribut je podmíněný atribut, který je součástí IL metadat vašeho sestavení spravovaného kódu, pouze v případě, že kompilace symbol CODE_ANALYSIS je definován v době kompilace.
V C + +/ CLI, přidejte atribut pomocí makra CA_SUPPRESS_MESSAGE nebo CA_GLOBAL_SUPPRESS_MESSAGE v souboru hlaviček.
Chcete-li zabránit omylem expediční metadat v zdroj potlačení byste neměli používat v zdroj suppressions ve verzích pro produkční nasazení.Kvůli nákladům na zpracování potlačení ve zdroji můžete výkon aplikace také snížena, včetně metadat potlačení ve zdroji.
[!POZNÁMKA]
Není nutné předat kód tyto atributy sami.Další informace naleznete v tématu Postupy: Potlačení upozornění použitím položky nabídky.Položka nabídky není k dispozici pro kód jazyka C++.
Atribut SuppressMessage
Když klepnete pravým tlačítkem na analýzu kódu upozornění v Seznam chyb a potom klepněte na tlačítko Potlačit zprávy, SuppressMessage je přidán atribut v kódu nebo globální suppressions souboru projektu.
SuppressMessage atribut má následující formát:
<Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")>
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]
[C++]
CA_SUPPRESS_MESSAGE("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")
Kam:
Pravidlo kategorie -kategorie, ve kterém je definováno pravidlo.Další informace o kategoriích pravidlo analýzu kódu, viz Upozornění Analýzy kódu pro spravovaný kód.
Pravidlo Id -identifikátor pravidla.Podpora zahrnuje jak krátký a dlouhý název pro identifikátor pravidla.Krátký název je CAXXXX; dlouhý název je CAXXXX:FriendlyTypeName.
Zdůvodnění -text, který umožňuje dokumentovat důvod pro potlačení zprávy.
Id zprávy -Jednoznačná identifikace problému pro každou zprávu.
Obor -cíl, na kterém je potlačit varování.Pokud není zadán cíl, je nastavena na cílový atribut.Podporované obory zahrnují následující:
Modul
Obor názvů
Prostředek
Type
Člen
Cíl - je identifikátor, který se používá k určení cíle, na kterém je potlačit varování.Musí obsahovat položku plně kvalifikovaný název.
Použití SuppressMessage
Kód analýzy varování se odstraňují na úrovni, na kterou instanci SuppressMessage je atribut aplikován.Účel tohoto je pevně spojit informace potlačení kódu kde dojde k narušení.
Obecná forma potlačení zahrnuje kategorie pravidla a pravidlo identifikátor, který obsahuje volitelné lidsky čitelných reprezentace název pravidla.Příklad:
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Pokud existují přísné výkonu důvody pro minimalizaci metadat potlačení ve zdroji, můžete vynecháno samotný název pravidla.Kategorie pravidel a jeho ID pravidla tvoří společně dostatečně jedinečný identifikátor pravidla.Příklad:
[SuppressMessage("Microsoft.Design", "CA1039")]
Tento formát není doporučena z důvodu problémů udržovatelnost.
Potlačení více porušení v těle metody
Atributy lze použít pouze pro metodu a nemůže být vložen v rámci základní text metody.Můžete však zadat identifikátor jako ID zprávy rozlišit více výskytů narušení přístupu v rámci metody.
Imports System
Namespace InSourceSuppression
Public Class Class1
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", _
"CA1801:ReviewUnusedParameters", MessageId:="cmdArgs")> _
Shared Sub Main(ByVal cmdArgs() As String)
End Sub
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", _
"CA1806:DoNotIgnoreMethodResults", MessageId:="System.Guid")> _
Shared Function IsValidGuid(ByVal g As String) As Boolean
Try
Dim instance As New Guid(g) 'Causes CA1806: DoNotIgnoreMethodResults
Return True
Catch e As ArgumentNullException
Catch e As OverflowException
Catch e As FormatException
End Try
Return False
End Function
End Class
End Namespace
using System;
namespace InSourceSuppression
{
public class Class1
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "args")]
static void Main(string[] args) { }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
"CA1806:DoNotIgnoreMethodResults", MessageId = "System.Guid")]
public static bool IsValidGuid(string guid)
{
try
{
new Guid(guid); //Causes CA1806: DoNotIgnoreMethodResults
return true;
}
catch (ArgumentNullException) {}
catch (OverflowException) {}
catch (FormatException) {}
return false;
}
}
}
using namespace System;
CA_SUPPRESS_MESSAGE("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId="args")
int main(array<System::String ^> ^args)
{
return 0;
}
namespace InSourceSuppression
{
public ref class Class1
{
public:
CA_SUPPRESS_MESSAGE("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId="System.Uri")
static bool IsValidGuid(String^ uri)
{
try
{
gcnew Uri(uri);
return true;
}
catch (ArgumentNullException^) {}
catch (OverflowException^) {}
catch (FormatException^) {}
return false;
}
};
}
Generovaný kód
Spravovaný kód kompilátory a některé nástroje jiných výrobců generování kódu pro usnadnění vývoje rychlé kódu.Kompilátor vygenerovaný kód, který se zobrazí ve zdrojových souborech je obvykle označen GeneratedCodeAttribute atribut.
Můžete zvolit, zda chcete potlačit analýza kódu upozornění a chyby generovaný kód.Chcete-li zobrazit informace o tom, jak potlačit toto varování a chyby naleznete v tématu Postupy: Potlačení upozornění Analýzy kódu pro vygenerovaný kód.
Všimněte si, že ignoruje Code Analysis GeneratedCodeAttribute při použití celé sestavení nebo jeden parametr.V těchto případech dochází jen zřídka.
Suppressions na globální úrovni
Analytický nástroj spravovaný kód kontroluje SuppressMessage atributy, které jsou použity na úrovni sestavení, modul, typu, člen nebo parametr.Také vyvolá porušováním prostředky a obory názvů.Tato porušení musí být použity na globální úrovni s rozsahem a jsou zaměřeny.Například následující zpráva potlačí narušení názvů:
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
[!POZNÁMKA]
Při potlačení upozornění s oborem názvů, potlačí varování proti oboru názvů sám.Není potlačit zobrazování upozornění před typy v rámci oboru názvů.
Žádné potlačení lze vyjádřit určením explicitní obor.Tyto suppressions musí živé na globální úrovni.Chcete-li určit úroveň členů potlačení, nelze dekorační typu.
Suppressions na globální úrovni jsou jediným způsobem, jak potlačit zobrazování zpráv, které odkazují na kompilátoru generovaný kód, který není mapována na explicitně zadané uživatelské zdroje.Například následující kód potlačí narušení proti konstruktor vyzařovaného kompilátoru:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
[!POZNÁMKA]
Cíl vždy obsahuje položku plně kvalifikovaný název.
Globální soubor potlačení
Soubor globální potlačení udržuje suppressions, které jsou globální úrovni suppressions nebo suppressions, které nemají zadán cíl.Například suppressions pro porušení úrovně sestavení jsou uloženy v tomto souboru.Navíc některé suppressions technologie ASP.NET jsou uložené v tomto souboru, protože úroveň nastavení projektu nejsou k dispozici pro kód formuláře.Globální potlačení je vytvořen a přidán do projektu při prvním výběru V souboru projektu potlačení možnost Potlačit zprávy příkazu v okně seznamu chyb.Další informace naleznete v tématu Postupy: Potlačení upozornění použitím položky nabídky.