A .NET-forráskódelemzés áttekintése
A .NET fordítóplatform (Roslyn) elemzői ellenőrzik a C# vagy a Visual Basic kód minőségét és stílusát. A .NET 5-től kezdve ezek az elemzők a .NET SDK részét képezik, és nem kell külön telepíteni őket. Ha a projekt a .NET 5-ös vagy újabb verzióját célozza meg, a kódelemzés alapértelmezés szerint engedélyezve van. Ha a projekt egy másik .NET-implementációt céloz meg, például .NET Core, .NET Standard vagy .NET-keretrendszer, manuálisan engedélyeznie kell a kódelemzést az EnableNETAnalyzers tulajdonság true
beállításával.
Ha nem szeretne a .NET 5+ SDK-ra váltani, nem SDK-stílusú .NET-keretrendszer projektje van, vagy inkább Egy NuGet-csomagalapú modellt szeretne, az elemzők a Microsoft.CodeAnalysis.NetAnalyzers NuGet csomagban is elérhetők. Igény szerinti verziófrissítésekhez érdemes csomagalapú modellt használni.
Feljegyzés
A .NET-elemzők a target-framework agnosztikusak. Ez azt jelenti, hogy a projektnek nem kell egy adott .NET-implementációt céloznia. Az elemzők a .NET 5+ és a korábbi .NET-verziók, például a .NET Core 3.1 és .NET-keretrendszer 4.7.2-et megcélzó projekteken dolgoznak. Ha azonban engedélyezni szeretné a kódelemzést az EnableNETAnalyzers tulajdonság használatával, a projektnek egy projekt SDK-ra kell hivatkoznia.
Ha egy elemző szabálysértéseket talál, a rendszer javaslatként, figyelmeztetésként vagy hibaként jelenti őket az egyes szabályok konfigurálásának módjától függően. A kódelemzési szabálysértések a "CA" vagy az "IDE" előtaggal jelennek meg, hogy megkülönböztessék őket a fordítóhibáktól.
Kódminőség-elemzés
A kódminőség-elemzés ("CAxxxx") szabályai biztonsági, teljesítménybeli, tervezési és egyéb problémák esetén ellenőrzik a C# vagy a Visual Basic kódot. Az elemzés alapértelmezés szerint engedélyezve van a .NET 5 vagy újabb verziót célzó projektek esetében. Az EnableNETAnalyzers tulajdonság beállításával true
A projekt kódelemzését a következő beállítással EnableNETAnalyzers
false
is letilthatja: .
Tipp.
Ha Visual Studiót használ, sok elemzőszabálynak társított kódjavításai vannak, amelyeket a probléma automatikus kijavításához alkalmazhat. A kódjavítások a villanykörte ikon menüjében jelennek meg.
Engedélyezett szabályok
A következő szabályok alapértelmezés szerint engedélyezve vannak hibaként vagy figyelmeztetésként a .NET 9-ben. További szabályok is engedélyezve vannak javaslatként.
Diagnosztikai azonosító | Kategória | Súlyosság | Hozzáadott verzió | Leírás |
---|---|---|---|---|
CA1416 | Együttműködési lehetőség | Figyelmeztetés | .NET 5 | Platformkompatibilitás ellenőrzése |
CA1417 | Együttműködési lehetőség | Figyelmeztetés | .NET 5 | Ne használjon OutAttribute sztringparamétereket a P/Invokes esetében |
CA1418 | Együttműködési lehetőség | Figyelmeztetés | .NET 6 | Érvényes platformsztring használata |
CA1420 | Együttműködési lehetőség | Figyelmeztetés | .NET 7 | Az olyan funkciók használata, amelyek futásidejű rendezést igényelnek, ha le van tiltva, futásidejű kivételekhez vezetnek |
CA1422 | Együttműködési lehetőség | Figyelmeztetés | .NET 7 | Platformkompatibilitás ellenőrzése |
CA1831 | Teljesítmény | Figyelmeztetés | .NET 5 | Ha szükséges, tartományalapú indexelők helyett használjon AsSpan sztringet |
CA1856 | Teljesítmény | Hiba | .NET 8 | Az attribútum helytelen használata ConstantExpected |
CA1857 | Teljesítmény | Figyelmeztetés | .NET 8 | Konstans várható a paraméterhez |
CA2013 | Megbízhatóság | Figyelmeztetés | .NET 5 | Ne használjon ReferenceEquals értéktípusokat |
CA2014 | Megbízhatóság | Figyelmeztetés | .NET 5 | Nem használható stackalloc hurkokban |
CA2015 | Megbízhatóság | Figyelmeztetés | .NET 5 | Ne definiáljon véglegesítőket a következőből származtatott típusok esetében: MemoryManager<T> |
CA2017 | Megbízhatóság | Figyelmeztetés | .NET 6 | A paraméterek száma nem egyezik |
CA2018 | Megbízhatóság | Figyelmeztetés | .NET 6 | A count másolandó Buffer.BlockCopy bájtok számát meghatározó argumentum |
CA2021 | Megbízhatóság | Figyelmeztetés | .NET 8 | Nem hívható Enumerable.Cast<T> vagy Enumerable.OfType<T> nem kompatibilis típusok |
CA2022 | Megbízhatóság | Figyelmeztetés | .NET 9 | Kerülje a nem praktikus olvasást a következővel: Stream.Read |
CA2200 | Használat | Figyelmeztetés | .NET 5 | Újrafedés a verem részleteinek megőrzése érdekében |
CA2247 | Használat | Figyelmeztetés | .NET 5 | A konstruktornak TaskCompletionSource átadott argumentumnak számnak kell lennie ahelyett, hogy TaskCreationOptionsTaskContinuationOptions |
CA2252 | Használat | Hiba | .NET 6 | Az előzetes verziójú funkciók használata |
CA2255 | Használat | Figyelmeztetés | .NET 6 | Az ModuleInitializer attribútum nem használható kódtárakban |
CA2256 | Használat | Figyelmeztetés | .NET 6 | A szülőfelületeken deklarált összes tagnak implementációval kell rendelkeznie egy DynamicInterfaceCastableImplementation -attribútummal rendelkező felületen |
CA2257 | Használat | Figyelmeztetés | .NET 6 | Az interfészen DynamicInterfaceCastableImplementationAttribute definiált tagoknak static |
CA2258 | Használat | Figyelmeztetés | .NET 6 |
DynamicInterfaceCastableImplementation A Visual Basic felületének megadása nem támogatott |
CA2259 | Használat | Figyelmeztetés | .NET 7 |
ThreadStatic csak a statikus mezőket érinti |
CA2260 | Használat | Figyelmeztetés | .NET 7 | Helyes típusparaméter használata |
CA2261 | Használat | Figyelmeztetés | .NET 8 | Ne használja a következővel ConfigureAwaitOptions.SuppressThrowing : Task<TResult> |
CA2264 | Használat | Figyelmeztetés | .NET 9 | Ne adjon át nem null értékű értéket a ArgumentNullException.ThrowIfNull |
CA2265 | Használat | Figyelmeztetés | .NET 9 | Ne hasonlítsa össze Span<T> a null default |
A szabályok súlyosságát módosíthatja, hogy letiltsa őket, vagy hibákra emelje őket. További szabályokat is engedélyezhet.
- Az egyes .NET SDK-verziókhoz tartozó szabályok listáját az Analyzer kiadásaiban találja.
- Az összes kódminőségi szabály listáját a Kódminőségi szabályok című témakörben találja.
További szabályok engedélyezése
Az elemzési mód egy előre definiált kódelemzési konfigurációra utal, amelyben nincs, néhány vagy minden szabály engedélyezve van. Az alapértelmezett elemzési módban (Default
) a rendszer csak kis számú szabályt engedélyez összeállítási figyelmeztetésként. A projekt elemzési módjának módosításához állítsa be a <AnalysisMode>
tulajdonságot a projektfájlban. Az engedélyezett értékek a következők:
Érték | Leírás |
---|---|
None |
Minden szabály le van tiltva. Az egyes szabályok engedélyezéséhez szelektíven is dönthet. |
Default |
Alapértelmezett mód, ahol bizonyos szabályok buildértesítésként vannak engedélyezve, bizonyos szabályok Visual Studio IDE-javaslatokként vannak engedélyezve, a többi pedig le van tiltva. |
Minimum |
Agresszívebb mód, mint Default mód. A buildkényszerítéshez erősen ajánlott javaslatok build figyelmeztetésként engedélyezve vannak. Ha meg szeretné tudni, hogy ez mely szabályokat tartalmazza, tekintse meg a %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_minimum.globalconfig fájlt. (.NET 7 és korábbi verziók esetén a fájlkiterjesztés .editorconfig.) |
Recommended |
Agresszívebb mód, mint Minimum a mód, ahol több szabály engedélyezve van a buildekre vonatkozó figyelmeztetésekként. Ha meg szeretné tekinteni, hogy ez mely szabályokat tartalmazza, vizsgálja meg a %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_recommended.globalconfig fájlt. (.NET 7 és korábbi verziók esetén a fájlkiterjesztés .editorconfig.) |
All |
A rendszer minden szabályt engedélyez összeállítási figyelmeztetésként*. A letiltásukhoz szelektíven letilthatja az egyes szabályokat. * A következő szabályok nem engedélyezettek latest-all Ezek az örökölt szabályok elavultak lehetnek egy későbbi verzióban. A bejegyzésekkel dotnet_diagnostic.CAxxxx.severity = <severity> azonban egyenként is engedélyezheti őket. |
A tulajdonság összetett értékét <AnalysisMode>
is kihagyhatja<AnalysisLevel>
. A következő érték például a legújabb kiadáshoz javasolt szabálykészletet teszi lehetővé: <AnalysisLevel>latest-Recommended</AnalysisLevel>
. További információ: AnalysisLevel
.
Ha meg szeretné állapítani az egyes elérhető szabályok alapértelmezett súlyosságát, és hogy a szabály engedélyezve van-e elemzési Default
módban, tekintse meg a szabályok teljes listáját.
Figyelmeztetések kezelése hibákként
Ha a projektek létrehozásakor használja a -warnaserror
jelzőt, a kódelemzési figyelmeztetések is hibaüzenetként lesznek kezelve. Ha nem szeretné, hogy a kódminőségre vonatkozó figyelmeztetések (CAxxxx) hibákként -warnaserror
legyenek kezelve, beállíthatja az CodeAnalysisTreatWarningsAsErrors
MSBuild tulajdonságot false
a projektfájlban.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
A kódelemzési figyelmeztetések továbbra is megjelennek, de nem fogják megszakítani a buildet.
Legújabb frissítések
Alapértelmezés szerint a .NET SDK újabb verzióira való frissítéskor a legújabb kódelemzési szabályokat és az alapértelmezett szabály súlyosságait fogja megkapni. Ha nem szeretné ezt a viselkedést, például ha meg szeretné győződni arról, hogy nincsenek új szabályok engedélyezve vagy letiltva, felülbírálhatja az alábbi módokon:
Állítsa az
AnalysisLevel
MSBuild tulajdonságot egy adott értékre, hogy zárolja a figyelmeztetéseket erre a halmazra. Az újabb SDK-ra való frissítéskor továbbra is hibajavítások jelennek meg ezekhez a figyelmeztetésekhez, de új figyelmeztetések nem lesznek engedélyezve, és a meglévő figyelmeztetések nem lesznek letiltva. Ha például a szabálykészletet a .NET SDK 8.0-s verziójával szállítja, adja hozzá a következő bejegyzést a projektfájlhoz.<PropertyGroup> <AnalysisLevel>8.0</AnalysisLevel> </PropertyGroup>
Tipp.
A tulajdonság
AnalysisLevel
alapértelmezett értéke,latest
ami azt jelenti, hogy a .NET SDK újabb verzióira való áttéréskor mindig a legújabb kódelemzési szabályokat kapja meg.További információkért és a lehetséges értékek listájának megtekintéséhez tekintse meg az AnalysisLevelet.
Telepítse a Microsoft.CodeAnalysis.NetAnalyzers NuGet-csomagot a szabályfrissítések .NET SDK-frissítésektől való leválasztásához. A .NET 5+-et megcélzó projektek esetében a csomag telepítése kikapcsolja a beépített SDK-elemzőket. Buildre vonatkozó figyelmeztetést kap, ha az SDK a NuGet-csomagénál újabb elemzőszerelvény-verziót tartalmaz. A figyelmeztetés letiltásához állítsa a tulajdonságot a
_SkipUpgradeNetAnalyzersNuGetWarning
következőretrue
: .Feljegyzés
Ha telepíti a Microsoft.CodeAnalysis.NetAnalyzers NuGet-csomagot, nem szabad hozzáadnia az EnableNETAnalyzers tulajdonságot sem a projektfájlhoz, sem a Directory.Build.props fájlhoz . Ha a NuGet-csomag telepítve van, és a
EnableNETAnalyzers
tulajdonság értéke be van állítvatrue
, létrejön egy összeállítási figyelmeztetés.
Kódstílus-elemzés
A kódstílus-elemzés ("IDExxxx") szabályai lehetővé teszik, hogy konzisztens kódstílust definiáljon és tartson fenn a kódbázisban. Az alapértelmezett engedélyezési beállítások a következők:
Parancssori build: A kódstílus-elemzés alapértelmezés szerint le van tiltva a parancssori buildeken lévő összes .NET-projekt esetében.
A kódstílus-elemzést a buildeléskor engedélyezheti a parancssorban és a Visual Studióban is. A kódstílusok megsértései figyelmeztetésként vagy "IDE" előtaggal kapcsolatos hibákként jelennek meg. Ez lehetővé teszi a konzisztens kódstílusok kikényszerítését a létrehozáskor.
Visual Studio: A kódstílus-elemzés alapértelmezés szerint engedélyezve van a Visual Studióban lévő összes .NET-projekthez, mint a gyorsműveletek kódjának újrabontása.
A kódstílus-elemzési szabályok teljes listáját a Kódstílus-szabályok című témakörben találja.
Engedélyezés builden
A kódstílus-elemzést a parancssorból és a Visual Studióban való készítéskor engedélyezheti. (Teljesítménybeli okokból azonban néhány kódstílus-szabály továbbra is csak a Visual Studio IDE-ben lesz érvényben.)
Kövesse az alábbi lépéseket a kódstílusok builden történő elemzésének engedélyezéséhez:
Állítsa az MSBuild EnforceCodeStyleInBuild tulajdonságot a következőre
true
: .A .editorconfig fájlban konfiguráljon minden olyan "IDE" kódstílus-szabályt, amelyet figyelmeztetésként vagy hibaként szeretne futtatni a builden. Példa:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_diagnostic.IDE0040.severity = warning
Tipp.
A .NET 9-től kezdődően a beállításformátumot is használhatja a súlyosság megadásához, és a létrehozáskor figyelembe kell venni. Példa:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_style_require_accessibility_modifiers = always:warning
Másik lehetőségként konfigurálhat egy teljes kategóriát alapértelmezés szerint figyelmeztetésként vagy hibaként, majd szelektíven kikapcsolhatja a szabályokat abban a kategóriában, amelyet nem szeretne builden futtatni. Példa:
[*.{cs,vb}] # Default severity for analyzer diagnostics with category 'Style' (escalated to build warnings) dotnet_analyzer_diagnostic.category-Style.severity = warning # IDE0040: Accessibility modifiers required (disabled on build) dotnet_diagnostic.IDE0040.severity = silent
Figyelmeztetés mellőzése
A szabálysértések letiltásának egyik módja, ha az adott szabályazonosító none
súlyossági beállítását egy Szerkesztőkonfigurációs fájlban állítja be. Példa:
dotnet_diagnostic.CA1822.severity = none
További információkért és a figyelmeztetések letiltásának egyéb módjaiért lásd : Kódelemzési figyelmeztetések letiltása.
Külső elemzők
A hivatalos .NET-elemzők mellett külső elemzőket is telepíthet, például StyleCop, Roslynator, XUnit Analyzers és Sonar Analyzer.