CA2252: Před použitím funkcí ve verzi Preview se přihlaste
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2252 |
Název | Přihlášení k funkcím ve verzi Preview před jejich použitím |
Kategorie | Využití |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 8 | Jako chyba |
Příčina
Klient používá rozhraní API nebo typy verze Preview ve svém sestavení bez výslovného souhlasu buď místně, nebo na úrovni modulu nebo sestavení.
Popis pravidla
Když je spotřebováno rozhraní API nebo sestavení, které je opatřeno atributem RequiresPreviewFeaturesAttribute , toto pravidlo zkontroluje, jestli se web volání přihlásil k funkcím ve verzi Preview. Web volání se přihlásil k funkcím ve verzi Preview, pokud platí jedna z následujících možností:
- Je v rozsahu poznámky
RequiresPreviewFeaturesAttribute
. - Je součástí sestavení nebo modulu, který se už přihlásil k funkcím ve verzi Preview.
Následující obrázek ukazuje příklad diagnostiky CA2252.
Tady je typ náhledu vytvořený Lib
v Main
metodě. Main
sama o sobě není opatřena poznámkami jako metoda preview, takže diagnostika se vytváří na dvou konstruktorech volání uvnitř Main
.
Jak opravit porušení
Porušení můžete opravit dvěma způsoby:
Přineste web volání do rozsahu poznámky tak, že opatříte jeho nadřazený objekt .
RequiresPreviewFeaturesAttribute
V předchozím příkladuAPreviewMethod
je anotována atributemRequiresPreviewFeatures
, takže analyzátor ignoruje použití typu preview uvnitřAPreviewMethod
. Následuje, že volajícíAPreviewMethod
budou muset provést podobné cvičení.Můžete se také přihlásit k funkcím ve verzi Preview na úrovni sestavení nebo modulu. To značí analyzátoru, že použití typu Preview v sestavení je žádoucí a v důsledku toho se tímto pravidlem nevygenerují žádné chyby. Toto je upřednostňovaný způsob, jak využívat závislosti ve verzi Preview. Pokud chcete povolit funkce preview v celém sestavení, nastavte vlastnost EnablePreviewFeatures v
.csproj
souboru:
<PropertyGroup>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
Kdy potlačit upozornění
Potlačení upozornění z tohoto pravidla se doporučuje pouze pro pokročilé případy použití, kdy je potřeba explicitně zakázat diagnostiku rozhraní API. V takovém případě musíte být ochotni převzít odpovědnost za správné označení rozhraní API ve verzi Preview. Představte si například případ, kdy existující typ implementuje nové rozhraní Preview. Vzhledem k tomu, že celý typ nelze označit jako náhled (kvůli zpětné kompatibilitě), může být diagnostika kolem definice typu zakázána místně. Dále je potřeba označit implementace rozhraní Preview jako preview. Stávající typ je teď možné použít jako předtím, ale volání nových metod rozhraní získají diagnostiku. System.Private.CoreLib.csproj používá tuto techniku k zveřejnění obecných matematických funkcí u číselných typů, jako Int32
jsou , Double
a Decimal
.
Následující obrázky ukazují, jak místně zakázat analyzátor CA2252.
Poznámka:
Falešně pozitivní upozornění z tohoto pravidla se můžou zobrazit, pokud platí všechny tyto skutečnosti:
- Používáte Sadu Visual Studio 2022 verze 17.5 nebo novější se starší verzí sady .NET SDK, tj. .NET 6 nebo starší.
- Používáte analyzátory ze sady .NET 6 SDK nebo starší verze balíčků analyzátoru, například Microsoft.CodeAnalysis.FxCopAnalyzers.
V tomto případě je bezpečné potlačit falešně pozitivní upozornění. Falešně pozitivní výsledky jsou způsobeny zásadní změnou kompilátoru jazyka C#. Zvažte použití novějšího analyzátoru, který obsahuje opravu falešně pozitivních upozornění. Upgradujte na Microsoft.CodeAnalysis.NetAnalyzers verze 7.0.0-preview1.22464.1 nebo novější nebo použijte analyzátory ze sady .NET 7 SDK.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA2252
// The code that's violating the rule is on this line.
#pragma warning restore CA2252
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA2252.severity = none
Chcete-li tuto celou kategorii pravidel zakázat, nastavte závažnost kategorie na none
hodnotu v konfiguračním souboru.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.