CA1505: Niet-onderhoudbare code vermijden
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1505 |
Titel | Onbeheerbare code voorkomen |
Categorie | Onderhoudbaarheid |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaarddrempelwaarde | 10 |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een type, methode, veld, eigenschap of gebeurtenis heeft een indexwaarde met een lage onderhoudbaarheid.
Beschrijving van regel
De regel meldt een schending wanneer de onderhoudbaarheidsindex van een type, methode, veld, eigenschap of gebeurtenis kleiner is dan 10. U kunt de drempelwaarde echter configureren.
De index voor onderhoudbaarheid wordt berekend met behulp van de volgende metrische gegevens: coderegels, programmavolume en cyclomatische complexiteit. (Programmavolume is een meting van de moeilijkheid om inzicht te krijgen in een type of methode die is gebaseerd op het aantal operators en operanden in de code. Cyclomatische complexiteit is een meting van de structurele complexiteit van het type of de methode. Meer informatie over metrische codegegevens vindt u in Complexiteit en onderhoudbaarheid van beheerde code meten.
Een index met een lage onderhoudbaarheid geeft aan dat een type of methode waarschijnlijk moeilijk te onderhouden is en een goede kandidaat is om opnieuw te ontwerpen.
Schendingen oplossen
Als u deze schending wilt oplossen, ontwerpt u het type of de methode opnieuw en probeert u het te splitsen in kleinere en meer gerichte typen of methoden.
Wanneer waarschuwingen onderdrukken
U kunt deze waarschuwing onderdrukken wanneer het type of de methode niet kan worden gesplitst of als onderhoudbaar wordt beschouwd ondanks de grote grootte.
Notitie
U ziet mogelijk fout-positieve waarschuwingen van deze regel als alle volgende van toepassing zijn:
- U gebruikt Visual Studio 2022 versie 17.5 of hoger met een oudere versie van de .NET SDK, dat wil zeggen .NET 6 of eerder.
- U gebruikt de analyses van de .NET 6 SDK of een oudere versie van de analysepakketten, zoals Microsoft.CodeAnalysis.FxCopAnalyzers.
De fout-positieven zijn te wijten aan een wijziging die fouten veroorzaakt in de C#-compiler. Overweeg om een nieuwere analyse te gebruiken die de oplossing voor de fout-positieve waarschuwingen bevat. Voer een upgrade uit naar Microsoft.CodeAnalysis.NetAnalyzers versie 7.0.0-preview1.22464.1 of hoger of gebruik de analyses van de .NET 7 SDK.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1505
// The code that's violating the rule is on this line.
#pragma warning restore CA1505
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1505.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Drempelwaarde configureren
U kunt de drempelwaarde configureren waarop deze regel wordt geactiveerd en de soorten symbolen die moeten worden geanalyseerd. De toegestane symbooltypen zijn:
Assembly
Namespace
Type
Method
Field
Event
Property
Maak een tekstbestand met de naam CodeMetricsConfig.txt.
Voeg de gewenste drempelwaarde toe aan het tekstbestand in de volgende indeling:
CA1505: 20
In dit voorbeeld is de regel zo geconfigureerd dat deze wordt geactiveerd wanneer de onderhoudbaarheidsindex van een type, methode, veld, eigenschap of gebeurtenis kleiner is dan 20.
CA1505(Method): 5 CA1505(Type): 15
In dit voorbeeld is de regel zo geconfigureerd dat deze wordt geactiveerd wanneer de index voor onderhoudbaarheid van een methode kleiner is dan 5 of de onderhoudbaarheidsindex van een type kleiner is dan 15. Met dit configuratiebestand blijft de regel velden, eigenschappen en gebeurtenissen markeren waarvan de index voor onderhoudbaarheid kleiner is dan de standaarddrempelwaarde (10).
Markeer in het projectbestand de buildactie van het configuratiebestand als AdditionalFiles. Bijvoorbeeld:
<ItemGroup> <AdditionalFiles Include="CodeMetricsConfig.txt" /> </ItemGroup>