Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha kód létrehozásakor együttműködik a csapatával, gyakran hasznos azt jelezni, hogy a figyelmeztetés nem alkalmazható. A kódelemzési szabálysértések letiltása azt jelzi a csapattagoknak, hogy a kódot felülvizsgálták, és a figyelmeztetés el is tiltható. Az alábbi szakaszok a kódelemzési szabálysértések Visual Studio IDE használatával történő letiltásának különböző módjait ismertetik.
Szabálysértések letiltása a Szerkesztőkonfigurációs fájllal
A megoldáshoz vagy projekthez tartozó EditorConfig fájlban adjon hozzá egy bejegyzést minden konfigurálni kívánt szabályhoz, és állítsa annak súlyosságát a következőre none: . Például: dotnet_diagnostic.CA1822.severity = none. További információ: Szabály súlyosságának manuális konfigurálása Egy EditorConfig-fájlban. Szerkesztőkonfigurációs fájl hozzáadásáról a Szerkesztőkonfigurációs fájl hozzáadása projekthez című témakörben olvashat.
Szabálysértések letiltása a forráskódban
A forráskódban lévő szabálysértéseket egy preprocesszor-direktívával tilthatja le, amely egy adott kódsor megsértéseit tiltja le:
- C#: #pragma figyelmeztetés
- Visual Basic: Figyelmeztetés letiltása
Vagy a SuppressMessageAttribute attribútummal letilthat egy figyelmeztetést a C# és a Visual Basic kódban.
Szabálysértések letiltása a kódszerkesztővel
A szabálysértések a kódszerkesztővel való letiltásához kövesse az alábbi lépéseket:
Helyezze a kurzort a kód sorába a szabálysértéssel, és nyomja le a Ctrl+Period (.) vagy az Alt+Enter billentyűkombinációt a Gyorsműveletek menü megnyitásához.
Válassza a Problémák elnyomása vagy konfigurálása>Szabályszám <lenyomása> lehetőséget, majd válassza ki a Forrás vagy Forrás (attribútum) lehetőséget.
Ha a Forrás lehetőséget választja, megjelenik a kódhoz hozzáadott előfeldolgozási irányelv előzetes verziója.
Ha a Forrás (attribútum) lehetőséget választja, megjelenik a kódhoz hozzáadott SuppressMessageAttribute attribútum előnézete.
Szabálysértések letiltása globális tiltófájl használatával
A globális letiltási fájl a SuppressMessageAttribute attribútummal tiltja le a kódsértéseket.
Globális tiltófájl használata a kódszerkesztőből
Ha globális tiltófájllal szeretné letiltani a szabálysértéseket a kódszerkesztővel, kövesse az alábbi lépéseket:
A kódszerkesztőben helyezze a kurzort egy kódsorra egy szabálysértéssel, és nyomja le a Ctrl+Period (.) vagy az Alt+Enter billentyűkombinációt a Gyorsműveletek menü megnyitásához.
Válassza a Szabályszám< mellőzése >lehetőséget, majd válassza a Letiltási fájl lehetőséget.
A Visual Studio létrehoz egy lapot a kódszerkesztőben, amely tartalmazza az új globális letiltási fájlt.
Az összes jelenlegi szabálysértés letiltása
Az összes jelenlegi szabálysértés elnyomását néha referenciapontként rögzítésnek nevezik. Egy megoldás vagy projekt összes jelenlegi szabálysértésének letiltásához kövesse az alábbi lépéseket:
A Visual Studio menüsávon válassza aBuild elemzése és az Aktív problémák mellőzése> lehetőséget.
Válassza a Megoldáshoz lehetőséget a teljes megoldás szabálysértéseinek letiltásához, vagy válassza a Projektnév< megadása > lehetőséget a csak a projekt szabálysértéseinek letiltásához.
Szabálysértések letiltása a projektbeállítások használatával
A szabálysértések megoldáskezelő-projektbeállításokkal való letiltásához kövesse az alábbi lépéseket:
A Megoldáskezelőben válassza ki a projektet.
Kattintson a jobb gombbal, majd válassza a Tulajdonságok lehetőséget (vagy nyomja le az Alt + Enter billentyűkombinációt).
A Tulajdonságok ablakban válassza a Kódelemzés lehetőséget a bal oldali panelen, majd törölje a pipát az "Eredmények letiltása a generált kódból" opcióból.
Forráson belüli letiltás és a SuppressMessageAttribute attribútum
A forráson belüli letiltás (ISS) az SuppressMessageAttribute attribútum használatával tiltja le a figyelmeztetést. Az attribútumot hozzáadhatja SuppressMessageAttribute a forrásfájlhoz a figyelmeztetést létrehozó kódszegmens közelében.
Az attribútumot manuálisan is beírhatja a kódszerkesztőbe, vagy automatikusan hozzáadhatja az attribútumot az alábbiak szerint:
A kódszerkesztőben helyezze a kurzort egy kódsorra egy szabálysértéssel, és nyomja le a Ctrl+Period (.) vagy az Alt+Enter billentyűkombinációt a Gyorsműveletek menü megnyitásához.
A Gyorsműveletek menüben válassza a > lehetőséget, válassza a <szabályszám> mellőzése opciót.
Hajtsa végre az alábbi lépések egyikét:
Válassza a Forrás (attribútum) lehetőséget.
A Visual Studio hozzáad egy
SuppressMessageAttributeattribútumot a kódhoz.Válassza a Letiltási fájlban.
A Visual Studio létrehoz egy lapot a kódszerkesztőben, amely egy új globális letiltási fájlt
SuppressMessageAttributetartalmaz attribútumokkal.
Az SuppressMessageAttribute attribútum egy feltételes attribútum, amely a felügyelt kódszerelvény metaadatai között szerepel. Ezt az attribútumot csak akkor tartalmazza a rendszer, ha a CODE_ANALYSIS fordítási szimbólum fordításkor van definiálva.
Csak C++ és CLI kódban használja a makrókat CA_SUPPRESS_MESSAGE vagy CA_GLOBAL_SUPPRESS_MESSAGE a fejlécfájlban az attribútum hozzáadásához.
Ha egy projektet a Visual Studio legújabb verziójára migrál, számos kódelemzési figyelmeztetés jelenhet meg. Ha nem áll készen a figyelmeztetések kijavítására, az Elemzés összeállítása>és az Aktív problémák mellőzése lehetőség kiválasztásával letilthatja az összes figyelmeztetést.
Megjegyzés:
Ne használjon forráson belüli letiltásokat a kiadási buildeken, hogy megakadályozza a forráson belüli letiltási metaadatok véletlen szállítását.
SuppressMessageAttribute attribútum formátuma
Az SuppressMessageAttribute attribútum formátuma a következő:
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]
Az attribútum tulajdonságai a következők:
Category: A szabály kategóriája. A kódelemzési szabálykategóriákról további információt a Kódminőségi szabályok című témakörben talál.CheckId:A szabály azonosítója. A támogatás magában foglalja a szabályazonosító rövid és hosszú nevét is. A rövid név aCAXXXX, a hosszú név pedig aCAXXXX:FriendlyTypeName.Justification: Az üzenet letiltásának okát dokumentáló szöveg.MessageId: A probléma egyedi azonosítója az egyes üzenetekhez.Scope: Az a cél, amelyen a figyelmeztetés el van tiltva. Ha a cél nincs megadva, a rendszer az attribútum célhelyére állítja. A támogatott hatókörök a következők:module: Ez a hatókör letiltja a szerelvényre vonatkozó figyelmeztetéseket. Ez egy globális elnyomás, amely a teljes projektre vonatkozik.resource: (csak örökölt elemzés esetén) Ez a hatókör letiltja a modul (szerelvény) részét képező erőforrásfájlokra írt diagnosztikai információk figyelmeztetéseit. Ezt a hatókört a Roslyn-elemző diagnosztika C#/VB-fordítói nem olvassák és nem tartják tiszteletben, és csak a forrásfájlokat elemzik.type: Ez a hatókör letiltja a típusra vonatkozó figyelmeztetéseket.member: Ez a hatókör letiltja a tagokra vonatkozó figyelmeztetéseket.namespace: Ez a hatókör letiltja a névtérre vonatkozó figyelmeztetéseket. Nem tiltja le a névtéren belüli típusokkal kapcsolatos figyelmeztetéseket.namespaceanddescendants: (A fordító 3.x vagy újabb verziójára és a Visual Studio 2019-es vagy újabb verziójára van szükség) Ez a hatókör letiltja a névtérben és annak összes leszármazott szimbólumában megjelenő figyelmeztetéseket. Az örökölt elemzés figyelmen kívül hagyja aznamespaceanddescendantsértéket.
Target: Egy azonosító, amely megadja azt a célt, amelyen a figyelmeztetés el van tiltva. Teljes összetevőnevet kell tartalmaznia.
Ha figyelmeztetéseket lát a Visual Studióban, példákat SuppressMessageAttribute tekinthet meg a globális letiltási fájlhoz való hozzáadással. A letiltási attribútum és a szükséges tulajdonságok egy előnézeti ablakban jelennek meg.
SuppressMessageAttribute használat
A kódelemzési figyelmeztetések azon a szinten vannak letiltva, amelyen az SuppressMessageAttribute attribútum alkalmazva van. Az attribútum például alkalmazható a szerelvény, a modul, a típus, a tag vagy a paraméter szintjén. Ennek az attribútumnak az a célja, hogy szorosan összekapcsolja a letiltási információkat azzal a kóddal, amelyben a szabálysértés történik.
A letiltás általános formája magában foglalja a szabálykategóriát és a szabályazonosítót, amely a szabálynév opcionális, emberi olvasásra alkalmas ábrázolását tartalmazza. Például:
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Ha a forráson belüli letiltási metaadatok minimalizálása szigorú teljesítménnyel jár, a szabály neve kihagyható. A szabálykategória és a szabályazonosító együttesen kellően egyedi szabályazonosítót alkotnak. Például:
[SuppressMessage("Microsoft.Design", "CA1039")]
Karbantarthatósági okokból nem ajánlott kihagyni a szabály nevét.
Szelektív szabálysértések letiltása egy metódustörzsben (csak örökölt elemzés esetén)
A letiltási attribútumok alkalmazhatók egy metódusra, de nem ágyazhatók be a metódus törzsébe. Egy adott szabály minden megsértése el lesz tiltva, ha hozzáadja az SuppressMessageAttribute attribútumot a metódushoz.
Bizonyos esetekben előfordulhat, hogy el szeretné tiltani a szabálysértés egy adott példányát. Vegyük például azt a példát, amelyben a jövőbeli kód nem mentesül automatikusan a kódelemzési szabály alól. Bizonyos kódelemzési szabályok lehetővé teszik, hogy a MessageId attribútum SuppressMessageAttribute tulajdonságával letiltsa egy adott szabálysértés példányát. Általánosságban elmondható, hogy egy adott szimbólum (helyi változó vagy paraméter) szabálysértéseinek régi szabályai tiszteletben tartják a tulajdonságot MessageId .
A CA1500:VariableNamesShouldNotMatchFieldNames példa egy ilyen szabályra. A végrehajtható kód (nem szimbólum) szabálysértéseinek régi szabályai azonban nem tartják tiszteletben a tulajdonságot MessageId . A .NET Fordítóplatform ("Roslyn") elemzői nem tartják tiszteletben a tulajdonságot MessageId .
Ha el szeretné tiltani egy szabály egy adott szimbólumsértését, adja meg az MessageId attribútum tulajdonságának szimbólumnevét SuppressMessageAttribute . Az alábbi példa a CA1500:VariableNamesShouldNotMatchFieldNames két szabálysértési kódját mutatja be: a változó egyik megsértése name , a másik pedig a age változó megsértése. A rendszer csak a age szimbólum megsértését tiltja le.
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}");
}
}
Globális szintű elnyomások
A felügyelt kódelemző eszköz megvizsgálja a szerelvény, modul SuppressMessageAttribute , típus, tag vagy paraméter szintjén alkalmazott attribútumokat. Emellett megsérti az erőforrásokat és a névtereket. Ezeket a szabálysértéseket globális szinten kell alkalmazni, és hatókörük és céljuk. A következő üzenet például letiltja a névtér megsértését:
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
Globális szintű letiltások esetén:
Ha hatókörrel letilt egy figyelmeztetést
namespace, az letiltja a névtérre vonatkozó figyelmeztetést. Nem tiltja le a névtéren belüli típusokra vonatkozó figyelmeztetést.Targetmindig tartalmazza a teljesen meghatározott elemnevet.A letiltás explicit hatókör megadásával fejezhető ki. Ezeknek a korlátozásoknak globális szinten kell lenniük. Egy típus módosításával nem adhatja meg a tagszintű letiltást.
A globális szintű letiltások az egyetlen módja annak, hogy letiltsuk azokat az üzeneteket, amelyek olyan fordító által létrehozott kódra hivatkoznak, amely nem felel meg a kifejezetten megadott felhasználói forrásnak. A következő kód például letiltja a fordító által kibocsátott konstruktorok megsértését:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Globális letiltási fájl
A globális elnyomási fájl olyan elnyomásokat tart fenn, amelyek globális szintű elnyomások vagy olyan elnyomások, amelyek nem határoznak meg célokat. Például az összeszerelési szintű szabályszegések elnyomása ebben a fájlban kerül tárolásra. Emellett néhány ASP.NET letiltás is ebben a fájlban van tárolva, mert a projektszintű beállítások nem érhetők el az űrlap mögötti kódhoz. A Visual Studio globális letiltási fájlt hoz létre, és ad hozzá a projekthez, első alkalommal, amikor kiválasztja a Hibalista ablakban a Letiltás parancs In Project Suppression File opcióját.
Modul elnyomási hatókör
A module hatókör használatával elnyomhatja a teljes szerelvény kódminőség-szabálysértéseit.
A GlobalSuppressions projektfájl következő attribútuma például letiltja a ConfigureAwait szabálysértést egy ASP.NET Core-projekt esetében:
[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")]
Generált kód
A felügyelt kódfordítók és néhány külső eszköz kódokat hoz létre a gyors kódfejlesztéshez. A forrásfájlokban megjelenő fordító által létrehozott kód az attribútummal GeneratedCodeAttribute van megjelölve.
A forráskódelemzéshez letilthatja az üzeneteket egy .editorconfig fájlban létrehozott kódban. További információ: Generált kód kizárása.
Az örökölt kódelemzéshez eldöntheti, hogy letiltja-e a kódelemzési figyelmeztetéseket és a generált kód hibáit. Az ilyen figyelmeztetések és hibák letiltásáról további információt a kódelemzési figyelmeztetések letiltása a generált kódhoz című témakörben talál.
Megjegyzés:
A kódelemzés figyelmen kívül hagyja GeneratedCodeAttribute , ha egy teljes szerelvényre vagy egy paraméterre alkalmazza.