.NET kaynak kodu analizine genel bakış
.NET derleyici platformu (Roslyn) çözümleyicileri C# veya Visual Basic kodunuzu kod kalitesi ve stil sorunları açısından inceler. .NET 5'den başlayarak, bu çözümleyiciler .NET SDK'sına eklenir ve bunları ayrı olarak yüklemeniz gerekmez. Projeniz .NET 5 veya üzerini hedeflediyse, kod analizi varsayılan olarak etkinleştirilir. Projeniz .NET Core, .NET Standard veya .NET Framework gibi farklı bir .NET uygulamasını hedef alıyorsa, EnableNETAnalyzers özelliğini olarak ayarlayarak kod analizini true
el ile etkinleştirmeniz gerekir.
.NET 5+ SDK'ya geçmek istemiyorsanız, SDK stilinde olmayan bir .NET Framework projeniz varsa veya NuGet paket tabanlı bir model tercih ediyorsanız çözümleyiciler Microsoft.CodeAnalysis.NetAnalyzers NuGet paketinde de kullanılabilir. İsteğe bağlı sürüm güncelleştirmeleri için paket tabanlı bir model tercih edebilirsiniz.
Not
.NET çözümleyicileri target-framework agnostic'tir. Başka bir ifadeyle, projenizin belirli bir .NET uygulamasını hedeflemesi gerekmez. Çözümleyiciler. .NET 5+ ve .NET Core 3.1 ve .NET Framework 4.7.2 gibi önceki .NET sürümlerini hedefleyen projeler için çalışır. Ancak EnableNETAnalyzers özelliğini kullanarak kod analizini etkinleştirmek için projenizin bir proje SDK'sına başvurması gerekir.
Kural ihlalleri bir çözümleyici tarafından bulunursa, her kuralın nasıl yapılandırıldığına bağlı olarak öneri, uyarı veya hata olarak bildirilir. Kod çözümleme ihlalleri, derleyici hatalarından ayırt etmek için "CA" veya "IDE" ön ekiyle birlikte görünür.
Kod kalitesi analizi
Kod kalitesi analizi ("CAxxxx") kuralları C# veya Visual Basic kodunuzu güvenlik, performans, tasarım ve diğer sorunlar açısından inceler. Analiz, .NET 5 veya üzerini hedefleyen projeler için varsayılan olarak etkindir. EnableNETAnalyzers özelliğini olarak ayarlayarak önceki .NET sürümlerini hedefleyen projelerde kod analizini true
etkinleştirebilirsiniz. olarak ayarlayarak EnableNETAnalyzers
projeniz için kod analizini false
de devre dışı bırakabilirsiniz.
İpucu
Visual Studio kullanıyorsanız, birçok çözümleyici kuralının sorunu düzeltmek için uygulayabileceğiniz ilişkili kod düzeltmeleri vardır. Ampul simgesi menüsünde kod düzeltmeleri gösterilir.
Etkin kurallar
Aşağıdaki kurallar varsayılan olarak .NET 8'de hata veya uyarı olarak etkinleştirilir. Ek kurallar öneri olarak etkinleştirilir.
Tanılama Kimliği | Kategori | Önem | Sürüm eklendi | Açıklama |
---|---|---|---|---|
CA1416 | Birlikte çalışabilirlik | Uyarı | .NET 5 | Platform uyumluluğunu doğrula |
CA1417 | Birlikte çalışabilirlik | Uyarı | .NET 5 | P/Invokes için dize parametrelerinde kullanmayın OutAttribute |
CA1418 | Birlikte çalışabilirlik | Uyarı | .NET 6 | Geçerli platform dizesini kullanma |
CA1420 | Birlikte çalışabilirlik | Uyarı | .NET 7 | Devre dışı bırakıldığında çalışma zamanı hazırlama gerektiren özelliklerin kullanılması çalışma zamanı özel durumlarına neden olur |
CA1422 | Birlikte çalışabilirlik | Uyarı | .NET 7 | Platform uyumluluğunu doğrula |
CA1831 | Performans | Uyarı | .NET 5 | Uygun olduğunda dize için aralık tabanlı dizin oluşturucular yerine kullanın AsSpan |
CA1856 | Performans | Hata | .NET 8 | Yanlış öznitelik kullanımı ConstantExpected |
CA1857 | Performans | Uyarı | .NET 8 | parametresi için bir sabit bekleniyor |
CA2013 | Güvenilirlik | Uyarı | .NET 5 | Değer türleriyle kullanmayın ReferenceEquals |
CA2014 | Güvenilirlik | Uyarı | .NET 5 | Döngüler içinde kullanmayın stackalloc |
CA2015 | Güvenilirlik | Uyarı | .NET 5 | Türetilen türler için sonlandırıcıları tanımlama MemoryManager<T> |
CA2017 | Güvenilirlik | Uyarı | .NET 6 | Parametre sayısı uyuşmazlığı |
CA2018 | Güvenilirlik | Uyarı | .NET 6 | öğesinin count Buffer.BlockCopy bağımsız değişkeni, kopyalanacak bayt sayısını belirtmelidir |
CA2021 | Güvenilirlik | Uyarı | .NET 8 | Uyumlu olmayan türleri çağırmayın Enumerable.Cast<T> veya Enumerable.OfType<T> |
CA2022 | Güvenilirlik | Uyarı | .NET 9 | ile aşırı okunmasından kaçının Stream.Read |
CA2200 | Kullanım | Uyarı | .NET 5 | Yığın ayrıntılarını korumak için yeniden fırlatın |
CA2247 | Kullanım | Uyarı | .NET 5 | Oluşturucuya TaskCompletionSource geçirilen bağımsız değişken, yerine sabit listesi olmalıdır TaskCreationOptionsTaskContinuationOptions |
CA2252 | Kullanım | Hata | .NET 6 | Önizleme özelliklerini kabul etme |
CA2255 | Kullanım | Uyarı | .NET 6 | ModuleInitializer Öznitelik kitaplıklarda kullanılmamalıdır |
CA2256 | Kullanım | Uyarı | .NET 6 | Üst arabirimlerde bildirilen tüm üyelerin -attributed arabiriminde bir DynamicInterfaceCastableImplementation uygulaması olmalıdır |
CA2257 | Kullanım | Uyarı | .NET 6 | ile DynamicInterfaceCastableImplementationAttribute bir arabirimde tanımlanan üyeler static |
CA2258 | Kullanım | Uyarı | .NET 6 | Visual Basic'te arabirim DynamicInterfaceCastableImplementation sağlama desteklenmiyor |
CA2259 | Kullanım | Uyarı | .NET 7 | ThreadStatic yalnızca statik alanları etkiler |
CA2260 | Kullanım | Uyarı | .NET 7 | Doğru tür parametresini kullanma |
CA2261 | Kullanım | Uyarı | .NET 8 | ile kullanmayın ConfigureAwaitOptions.SuppressThrowing Task<TResult> |
Bu kuralları devre dışı bırakmak veya hatalara yükseltmek için önem derecesini değiştirebilirsiniz. Ayrıca daha fazla kuralı etkinleştirebilirsiniz.
- Her .NET SDK sürümüne dahil edilen kuralların listesi için bkz . Çözümleyici sürümleri.
- Tüm kod kalitesi kurallarının listesi için bkz . Kod kalitesi kuralları.
Ek kuralları etkinleştirme
Çözümleme modu , hiçbir kuralın, bazılarının veya tüm kuralların etkinleştirilmediği önceden tanımlanmış bir kod analizi yapılandırmasına başvurur. Varsayılan çözümleme modunda (Default
), derleme uyarısı olarak yalnızca az sayıda kural etkinleştirilir. Proje dosyasında özelliğini ayarlayarak <AnalysisMode>
projenizin çözümleme modunu değiştirebilirsiniz. İzin verilebilen değerler şunlardır:
Value | Açıklama |
---|---|
None |
Tüm kurallar devre dışı bırakılır. Kuralları etkinleştirmek için tek tek kuralları seçmeli olarak kabul edebilirsiniz. |
Default |
Belirli kuralların derleme uyarıları olarak etkinleştirildiği, visual studio IDE önerileri olarak belirli kuralların etkinleştirildiği ve kalanların devre dışı bırakıldığı varsayılan mod. |
Minimum |
Moddan daha Default agresif mod. Derleme zorlaması için kesinlikle önerilen bazı öneriler, derleme uyarıları olarak etkinleştirilir. Bunun hangi kuralları içerdiğini görmek için %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_minimum.editorconfig dosyasını inceleyin. |
Recommended |
Derleme uyarıları olarak daha fazla kuralın etkinleştirildiği moddan daha Minimum agresif mod. Bunun hangi kuralları içerdiğini görmek için %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_recommended.editorconfig dosyasını inceleyin. |
All |
Tüm kurallar derleme uyarıları* olarak etkinleştirilir. Kuralları devre dışı bırakmak için tek tek kuralları seçmeli olarak geri çevirebilirsiniz. * Şu kurallar şu şekilde ayarlanarak veya ayarlanarak All AnalysisMode AnalysisLevel latest-all etkinleştirilmez: CA1017, CA1045, CA1005, CA1014, CA1060, CA1021 ve kod ölçümleri çözümleyicisi kuralları (CA1501, CA1502, CA1505, CA1506 ve CA1509). Bu eski kurallar gelecekteki bir sürümde kullanım dışı bırakılmış olabilir. Ancak, yine de bir dotnet_diagnostic.CAxxxx.severity = <severity> giriş kullanarak bunları tek tek etkinleştirebilirsiniz. |
.NET 6'dan başlayarak, özelliği için <AnalysisLevel>
bileşik değer yerine atlayabilirsiniz<AnalysisMode>
. Örneğin, aşağıdaki değer en son sürüm için önerilen kural kümesini etkinleştirir: <AnalysisLevel>latest-Recommended</AnalysisLevel>
. Daha fazla bilgi için bkz. AnalysisLevel
.
Kullanılabilir her kuralın varsayılan önem derecesini ve kuralın analiz modunda etkinleştirilip etkinleştirilmediğini Default
bulmak için kuralların tam listesine bakın.
Uyarıları hata olarak değerlendirin
Projelerinizi oluştururken bayrağını -warnaserror
kullanırsanız, tüm kod analizi uyarıları da hata olarak değerlendirilir. Kod kalitesi uyarılarının (CAxxxx) varlığında -warnaserror
hata olarak değerlendirilmesini istemiyorsanız, proje dosyanızda MSBuild özelliğini olarak false
ayarlayabilirsinizCodeAnalysisTreatWarningsAsErrors
.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
Kod analizi uyarılarını görmeye devam edersiniz, ancak bunlar derlemenizi bozmaz.
En son güncelleştirmeler
Varsayılan olarak, .NET SDK'nın daha yeni sürümlerine yükselttikçe en son kod analizi kurallarını ve varsayılan kural önem derecelerini alırsınız. Örneğin, bu davranışı istemiyorsanız, yeni kuralların etkinleştirilmediğinden veya devre dışı bırakılmadığından emin olmak istiyorsanız, bunu aşağıdaki yollardan biriyle geçersiz kılabilirsiniz:
Uyarıları bu
AnalysisLevel
kümeye kilitlemek için MSBuild özelliğini belirli bir değere ayarlayın. Daha yeni bir SDK'ya yükselttiğiniz zaman, bu uyarılar için hata düzeltmeleri almaya devam edersiniz, ancak yeni uyarı etkinleştirilmez ve mevcut uyarılar devre dışı bırakılmaz. Örneğin, kural kümesini .NET SDK'sının 5.0 sürümüyle birlikte gelenlere kilitlemek için proje dosyanıza aşağıdaki girdiyi ekleyin.<PropertyGroup> <AnalysisLevel>5.0</AnalysisLevel> </PropertyGroup>
İpucu
özelliğinin
AnalysisLevel
varsayılan değeri olur.latest
Bu, .NET SDK'sının daha yeni sürümlerine geçiş sırasında her zaman en son kod çözümleme kurallarını almanız anlamına gelir.Daha fazla bilgi edinmek ve olası değerlerin listesini görmek için bkz . AnalysisLevel.
Kural güncelleştirmelerini .NET SDK güncelleştirmelerinden ayrıştırmak için Microsoft.CodeAnalysis.NetAnalyzers NuGet paketini yükleyin. .NET 5+ hedeflenen projeler için paketin yüklenmesi yerleşik SDK çözümleyicilerini kapatır. SDK, NuGet paketinden daha yeni bir çözümleyici derleme sürümü içeriyorsa bir derleme uyarısı alırsınız. Uyarıyı devre dışı bırakmak için özelliğini olarak
true
ayarlayın_SkipUpgradeNetAnalyzersNuGetWarning
.Not
Microsoft.CodeAnalysis.NetAnalyzers NuGet paketini yüklerseniz, EnableNETAnalyzers özelliğini proje dosyanıza veya Bir Directory.Build.props dosyasına eklememelisiniz. NuGet paketi yüklendiğinde ve
EnableNETAnalyzers
özelliği olaraktrue
ayarlandığında bir derleme uyarısı oluşturulur.
Kod stili çözümleme
Kod stili analizi ("IDExxxx") kuralları, kod tabanınızda tutarlı kod stili tanımlamanızı ve korumanızı sağlar. Varsayılan etkinleştirme ayarları şunlardır:
Komut satırı derlemesi: Kod stili çözümleme, komut satırı derlemelerindeki tüm .NET projeleri için varsayılan olarak devre dışıdır.
.NET 5'den başlayarak, derlemede hem komut satırında hem de Visual Studio'da kod stili analizi etkinleştirebilirsiniz. Kod stili ihlalleri bir "IDE" ön ekiyle uyarı veya hata olarak görünür. Bu, derleme zamanında tutarlı kod stillerini zorunlu kılmanızı sağlar.
Visual Studio: Kod stili çözümleme, kod yeniden düzenleme hızlı eylemleri olarak Visual Studio içindeki tüm .NET projeleri için varsayılan olarak etkindir.
Kod stili çözümleme kurallarının tam listesi için bkz . Kod stili kuralları.
Derlemede etkinleştir
.NET 5 SDK ve sonraki sürümleriyle, komut satırından ve Visual Studio'da derleme yaparken kod stili analizi etkinleştirebilirsiniz. (Ancak, performans nedenleriyle, birkaç kod stili kuralı yalnızca Visual Studio IDE'de geçerli olmaya devam eder.)
Derlemede kod stili analizini etkinleştirmek için şu adımları izleyin:
MSBuild özelliğini EnforceCodeStyleInBuild olarak
true
ayarlayın.Bir .editorconfig dosyasında, derlemede bir uyarı veya hata olarak çalıştırmak istediğiniz her "IDE" kod stili kuralını yapılandırın . Örneğin:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_diagnostic.IDE0040.severity = warning
İpucu
.NET 9'dan başlayarak, bir önem derecesi belirtmek ve derleme zamanında dikkate alınması için seçenek biçimini de kullanabilirsiniz. Örneğin:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_style_require_accessibility_modifiers = always:warning
Alternatif olarak, bir kategorinin tamamını varsayılan olarak bir uyarı veya hata olarak yapılandırabilir ve sonra bu kategorideki derlemede çalıştırmak istemediğiniz kuralları seçmeli olarak kapatabilirsiniz. Örneğin:
[*.{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
Uyarıyı gizleme
Kural ihlalini gizlemenin bir yolu, bir EditorConfig dosyasında bu kural kimliği none
için önem derecesi seçeneğini ayarlamaktır. Örneğin:
dotnet_diagnostic.CA1822.severity = none
Daha fazla bilgi ve uyarıları gizlemenin diğer yolları için bkz . Kod analizi uyarılarını gizleme.
Üçüncü taraf çözümleyiciler
Resmi .NET çözümleyicilerine ek olarak StyleCop, Roslynator, XUnit Analyzers ve Sonar Analyzer gibi üçüncü taraf çözümleyicileri de yükleyebilirsiniz.