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.
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. 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. (A .NET-keretrendszert megcélzó projektek kódelemzésének engedélyezéséről további információt az örökölt projektek kódelemzésének engedélyezése című témakörben talál.)
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 A projekt kódelemzését a következő beállítással EnableNETAnalyzersfalseis 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 10-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 | A futásidejű marshalingt igénylő funkciók használata, amikor az le van tiltva, futásidejű kivételekhez vezet. |
| 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 |
| CA2023 | Megbízhatóság | Figyelmeztetés | .NET 10 | Érvénytelen zárójelek az üzenetsablonban |
| 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 nulldefault |
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 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 -warnaserrorlegyenek 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
AnalysisLevelMSBuild 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
AnalysisLevelalapértelmezett értéke,latestami 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
_SkipUpgradeNetAnalyzersNuGetWarningkö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
EnableNETAnalyzerstulajdonsá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 = warningTipp.
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:warningMá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ódelemzés engedélyezése örökölt projektekben
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 a .NET Standard vagy a .NET-keretrendszert célozza, manuálisan engedélyeznie kell a kódelemzést az EnableNETAnalyzers tulajdonság truebeállításával.
Ha a projekt az örökölt projektfájlformátumot használja, vagyis nem hivatkozik projekt SDK-ra, a kódelemzés engedélyezéséhez további lépéseket kell tennie:
- Adjon hozzá egy hivatkozást a 📦 Microsoft.CodeAnalysis.NetAnalyzers NuGet csomagra.
- A nem SDK-stílusú projektek által nem értelmezhető beállítások
AnalysisLevelhelyett adja hozzá a következő tulajdonságokat a projektfájlhoz:
<EffectiveAnalysisLevel>9</EffectiveAnalysisLevel>
<AnalysisMode>Recommended</AnalysisMode>
Külső elemzők
A hivatalos .NET-elemzők mellett külső elemzőket is telepíthet, például StyleCop, Roslynator, Meziantou.Analyzer, XUnit Analyzers és Sonar Analyzer.