CA2252: Özellikleri kullanmadan önce önizlemeye katılma

Özellik Değer
Kural Kimliği CA2252
Başlık Özellikleri kullanmadan önce önizlemeyi kabul etme
Kategori Kullanım
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hata olarak

Neden

İstemci, yerel olarak veya modül ya da derleme düzeyinde açıkça kabul etmeden önizleme API'lerini veya türlerini derlemesinde kullanır.

Kural açıklaması

Özniteliğiyle RequiresPreviewFeaturesAttribute dekore edilmiş bir API veya derleme kullanıldığında, bu kural çağrı sitesinin özellikleri önizlemeyi kabul ettiğini denetler. Aşağıdakilerden biri geçerliyse, arama sitesi özellikleri önizlemeye kabul etti:

  • Bir ek açıklama kapsamındadır RequiresPreviewFeaturesAttribute .
  • Özellikleri önizlemeyi zaten kabul eden bir derlemenin veya modülün parçasıdır.

Aşağıdaki görüntüde CA2252 tanılama örneği gösterilmektedir.

Code editor with CA2252 warning.

Burada, Lib yönteminde Main bir önizleme türü oluşturulur. Main önizleme yöntemi olarak açıklama eklenmediğinden, içindeki Mainiki oluşturucu çağrısında tanılamalar oluşturulur.

İhlalleri düzeltme

İhlalleri düzeltmenin iki yolu vardır:

  • ile üst RequiresPreviewFeaturesAttributeöğesine açıklama ekleyerek bir arama sitesini ek açıklama kapsamına getirin. Önceki örnekte özniteliğine APreviewMethod ek açıklama eklendiğinden RequiresPreviewFeatures çözümleyici içindeki APreviewMethodönizleme türü kullanımını yoksayar. Bu, çağıranların APreviewMethod benzer bir alıştırma yapması gerekeceğini izler.

  • Özellikleri derleme veya modül düzeyinde önizlemeyi de seçebilirsiniz. Bu, çözümleyiciye derlemedeki önizleme türü kullanımının istendiğini ve sonuç olarak bu kural tarafından hata üretilmediğini gösterir. Bu, önizleme bağımlılıklarını kullanmanın tercih edilen yoludur. Derlemenin tamamında önizleme özelliklerini etkinleştirmek için bir dosyada .csproj EnablePreviewFeatures özelliğini ayarlayın:

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

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldaki uyarıların engellenmesi yalnızca API'lerdeki tanılamaların açıkça devre dışı bırakılması gereken gelişmiş kullanım örnekleri için önerilir. Bu durumda, önizleme API'lerini uygun şekilde işaretleme sorumluluğunu üstlenmeye istekli olmanız gerekir. Örneğin, mevcut bir türün yeni bir önizleme arabirimi uyguladığı bir durumu göz önünde bulundurun. Türün tamamı önizleme olarak işaretlenemediğinden (geriye dönük uyumluluk için), tür tanımıyla ilgili tanılama yerel olarak devre dışı bırakılabilir. Ayrıca, önizleme arabirimi uygulamalarını önizleme olarak işaretlemeniz gerekir. Şimdi, mevcut tür daha önce olduğu gibi kullanılabilir, ancak yeni arabirim yöntemlerine yapılan çağrılar tanılama alır. System.Private.CoreLib.csproj, , Doubleve Decimalgibi Int32sayısal türlerde genel matematik özelliklerini kullanıma açmak için bu tekniği kullanır.

Aşağıdaki görüntülerde CA2252 çözümleyicisinin yerel olarak nasıl devre dışı bırakılacağı gösterilmektedir.

CA2252 - Suppress Detect Preview Feature Diagnostic

CA2252 - Mark Interface Implementations Explicitly

Dekont

Aşağıdakilerin tümü geçerliyse bu kuraldan hatalı pozitif uyarılar görebilirsiniz:

  • Visual Studio 2022 sürüm 17.5 veya üzerini .NET SDK'nın daha eski bir sürümüyle ( .NET 6 veya önceki bir sürüm) kullanıyorsunuz.
  • .NET 6 SDK'sından çözümleyicileri veya çözümleyici paketlerinin Microsoft.CodeAnalysis.FxCopAnalyzers gibi eski bir sürümünü kullanıyorsunuz.

Bu durumda hatalı pozitif uyarıyı bastırmak güvenlidir. Hatalı pozitifler, C# derleyicisindeki hataya neden olan bir değişiklik nedeniyledir. Hatalı pozitif uyarıların düzeltmesini içeren daha yeni bir çözümleyici kullanmayı düşünün. Microsoft.CodeAnalysis.NetAnalyzers sürüm 7.0.0-preview1.22464.1 veya daha yeni bir sürüme yükseltin veya .NET 7 SDK'sından çözümleyicileri kullanın.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Bu kural kategorisinin tamamını devre dışı bırakmak için, kategorinin önem derecesini noneyapılandırma dosyasında olarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Ayrıca bkz.