Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET derleyici platformu (Roslyn) çözümleyicileri C# veya Visual Basic kodunuzu kod kalitesi ve stil sorunları açısından inceler. Bu çözümleyiciler .NET SDK'sına dahil edilmiştir ve bunları ayrı olarak yüklemeniz gerekmez. Projeniz .NET 5 veya üzerini hedeflediyse, kod analizi varsayılan olarak etkinleştirilir. (.NET Framework'i hedefleyen projelerde kod analizini etkinleştirme hakkında bilgi için bkz. Eski projelerde kod analizini etkinleştirme.)
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 trueetkinleştirebilirsiniz. olarak ayarlayarak EnableNETAnalyzers projeniz için kod analizini falsede devre dışı bırakabilirsiniz.
İpucu
Visual Studio kullanıyorsanız, sorunu otomatik olarak düzeltmek için uygulayabileceğiniz birçok çözümleyici kuralı
Etkin kurallar
Aşağıdaki kurallar varsayılan olarak .NET 10'da 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 | Çalışma zamanı hazırlama devre dışı bırakıldığında, bu özelliği kullanan işlemler çalışma zamanı hataları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 countBuffer.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 |
| CA2023 | Güvenilirlik | Uyarı | .NET 10 | İleti şablonunda geçersiz ayraçlar |
| 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 DynamicInterfaceCastableImplementationuygulaması 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.SuppressThrowingTask<TResult> |
| CA2264 | Kullanım | Uyarı | .NET 9 | Null değer atanamayan bir değeri'ne geçirmeyin ArgumentNullException.ThrowIfNull |
| CA2265 | Kullanım | Uyarı | .NET 9 | veya ile Span<T> karşılaştırma nulldefault |
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.globalconfig dosyasını inceleyin. (.NET 7 ve önceki sürümler için dosya uzantısı .editorconfig |
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.globalconfig dosyasını inceleyin. (.NET 7 ve önceki sürümler için dosya uzantısı .editorconfig |
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 : 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. |
Ayrıca <AnalysisMode> özelliği için <AnalysisLevel> bileşik değer yerine atlayabilirsiniz. Ö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 -warnaserrorhata olarak değerlendirilmesini istemiyorsanız, proje dosyanızda MSBuild özelliğini olarak CodeAnalysisTreatWarningsAsErrors ayarlayabilirsinizfalse.
<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
AnalysisLevelkü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 8.0 sürümüyle birlikte gelenlere kilitlemek için proje dosyanıza aşağıdaki girdiyi ekleyin.<PropertyGroup> <AnalysisLevel>8.0</AnalysisLevel> </PropertyGroup>İpucu
özelliğinin
AnalysisLevelvarsayılan değeri olur.latestBu, .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
_SkipUpgradeNetAnalyzersNuGetWarningayarlayıntrue.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 olaraktrueayarlandığı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.
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
Komut satırından ve Visual Studio'da derleme yaparken kod stili çözümlemeyi 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
trueayarlayı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:warningAlternatif 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.
Eski projelerde kod analizini etkinleştirme
Projeniz .NET 5 veya üzerini hedeflediyse, kod analizi varsayılan olarak etkinleştirilir. Projeniz .NET Standard veya .NET Framework'ü hedef alıyorsa, EnableNETAnalyzers özelliğini olarak ayarlayarak kod analizini trueel ile etkinleştirmeniz gerekir.
Projeniz eski proje dosya biçimini kullanıyorsa, yani bir proje SDK'sına başvurmuyorsa, kod analizini etkinleştirmek için uygulamanız gereken bazı ek adımlar vardır:
- Microsoft.CodeAnalysis.NetAnalyzers NuGet paketine📦 bir başvuru ekleyin.
- SDK stili olmayan projeler tarafından anlaşılamayan
AnalysisLevelayarlamak yerine, proje dosyanıza aşağıda belirtilen özellikleri ekleyin.
<EffectiveAnalysisLevel>9</EffectiveAnalysisLevel>
<AnalysisMode>Recommended</AnalysisMode>
Üçüncü taraf çözümleyiciler
Resmi .NET çözümleyicilerine ek olarak StyleCop, Roslynator, Meziantou.Analyzer, XUnit Analyzer ve Sonar Analyzer gibi üçüncü taraf çözümleyicileri de yükleyebilirsiniz.