共用方式為


CA2252:選擇加入預覽功能,再使用這些功能

屬性
規則識別碼 CA2252
職稱 選擇加入預覽功能,再使用這些功能
類別 使用方式
修正程式是中斷或非中斷 不中斷
預設在 .NET 9 中啟用 錯誤

原因

用戶端在其元件中使用預覽 API 或類型,而不需在本機或模組或元件層級明確選擇。

檔案描述

使用屬性 RequiresPreviewFeaturesAttribute 裝飾的 API 或元件時,此規則會檢查呼叫網站是否已選擇預覽功能。 如果適用下列其中一項,通話網站已選擇預覽功能:

  • 它位於批注的範圍內 RequiresPreviewFeaturesAttribute
  • 它是已加入加入預覽功能的元件或模組的一部分。

下圖顯示 CA2252 診斷的範例。

具有 CA2252 警告的程式碼編輯器。

Lib以下是在方法中建構的Main預覽類型。 Main 本身不會標註為預覽方法,因此會在 內部 Main的兩個建構函式呼叫上產生診斷。

如何修正違規

有兩種方式可以修正違規:

  • 使用標註其父 RequiresPreviewFeaturesAttribute代,將呼叫網站帶入批注範圍內。 在上一個範例中, APreviewMethod 會加上 RequiresPreviewFeatures 屬性的批註,因此分析器會忽略 內部的 APreviewMethod預覽類型使用方式。 接著,的 APreviewMethod 呼叫者必須執行類似的練習。

  • 您也可以選擇在元件或模組層級預覽功能。 這向分析器指出,想要預覽元件中的類型使用方式,因此,此規則不會產生任何錯誤。 這是取用預覽相依性的慣用方式。 若要啟用整個元件內的預覽功能,請在檔案中.csproj設定 EnablePreviewFeatures 屬性:

  <PropertyGroup>
    <EnablePreviewFeatures>true</EnablePreviewFeatures>
  </PropertyGroup>

隱藏警告的時機

只有在需要明確停用 API 診斷的進階使用案例中,才建議隱藏此規則的警告。 在此情況下,您必須願意承擔適當地標記預覽 API 的責任。 例如,假設現有類型實作新的預覽介面。 由於整個類型無法標示為預覽版(為了回溯相容性),因此可以在本機停用類型定義周圍的診斷。 此外,您必須將預覽介面實作標示為預覽。 現在,現有的類型可以像以前一樣使用,但對新介面方法的呼叫會取得診斷。 System.Private.CoreLib.csproj 會使用這項技術,在 、 和 DecimalInt32Double數值類型上公開泛型數學特徵。

下列影像顯示如何在本機停用 CA2252 分析器。

CA2252 - 隱藏偵測預覽功能診斷

CA2252 - 明確標記介面實作

注意

如果適用下列所有專案,您可能會看到來自此規則的誤判警告:

  • 您使用 Visual Studio 2022 17.5 版或更新版本搭配舊版 .NET SDK,也就是 .NET 6 或更早版本。
  • 您使用的是 .NET 6 SDK 或舊版分析器套件的分析器,例如 Microsoft.CodeAnalysis.FxCopAnalyzers。

在此情況下,可以放心地隱藏誤判警告。 誤判是由於 C# 編譯程式中的重大變更所造成。 請考慮使用包含誤判警告修正的較新分析器。 升級至 Microsoft.CodeAnalysis.NetAnalyzers 7.0.0-preview1.22464.1 版或更新版本,或使用 .NET 7 SDK 的分析器。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA2252
// The code that's violating the rule is on this line.
#pragma warning restore CA2252

若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none

[*.{cs,vb}]
dotnet_diagnostic.CA2252.severity = none

若要停用此整個規則類別,請將組態檔中類別的嚴重性設定為 none

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none

如需詳細資訊,請參閱 如何隱藏程式代碼分析警告

另請參閱