.NET kaynak kodu analizine genel bakış
.NET derleyici platformu (Roslyn) çözümleyicileri C# veya Visual Basic ve stil sorunları için kodlarınızı inceler. .NET 5'te başlayarak, bu çözümleyiciler .NET SDK'sı ile birlikte gelir ve bunları ayrı olarak yüklemeniz gerekmez. Projeniz .NET 5 veya sonraki bir 5'i hedeflediyse kod analizi varsayılan olarak etkindir. Projeniz .NET Core, .NET Standard veya .NET Framework gibi farklı bir .NET uygulamasını hedeflerse EnableNETAnalyzers özelliğini olarak ayarerek kod analizini el ile etkinleştirmeniz gerekirtrue
.
.NET 5+ SDK'ya gitmek istemiyorsanız, SDK stili 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. isteğe bağlı sürüm güncelleştirmeleri için paket tabanlı bir model tercih edersiniz.
Not
.NET çözümleyicileri hedef çerçeveden bağımsızdır. Başka bir ifadeyle, projenizin belirli bir .NET uygulamasını hedeflemesi gerek değildir. Çözümleyiciler. .NET 5+ sürümünü ve .NET Core 3.1 ve .NET Framework 4.7.2 gibi önceki .NET sürümlerini hedef alan projelerde çalışır. Ancak EnableNETAnalyzers özelliğini kullanarak kod analizini etkinleştirmek için projenizin bir proje SDK'sı başvurusunda olması gerekir.
Kural ihlalleri bir çözümleyici tarafından bulunursa, her kuralın nasıl yapılandırıldıkına bağlı olarak bir öneri, uyarı veya hata olarak rapor edilir. Kod analizi ihlalleri, derleyici hatalarından ayırt etmek için "CA" veya "IDE" ön ekleriyle birlikte görüntülenir.
Kod kalitesi analizi
Kod kalitesi analizi ("CAxxxx") kuralları C# veya Visual Basic, performans, tasarım ve diğer sorunlar için kodlarınızı inceler. .NET 5 veya sonraki bir 5'i hedef alan projeler için analiz varsayılan olarak etkindir. EnableNETAnalyzers özelliğini olarak ayarerek önceki .NET sürümlerini hedef alan projelerde kod analizini etkinleştirebilirsiniztrue
. ayrıca olarak ayararak projeniz için kod analizini devre dışı EnableNETAnalyzers
abilirsiniz false
.
İpucu
Çözümleyici kullanıyorsanız Visual Studio çözümleyici kurallarının, sorunu düzeltmek için uygulayabilecek ilişkili kod düzeltmeleri vardır. Kod düzeltmeleri ampul simgesi menüsünde gösterilir.
Etkin kurallar
Aşağıdaki kurallar .NET 6'da varsayılan olarak etkindir.
Tanılama Kimliği | Kategori | Önem Derecesi | Açıklama |
---|---|---|---|
CA1416 | Birlikte çalışabilirlik | Uyarı | Platform uyumluluk çözümleyicisi |
CA1417 | Birlikte çalışabilirlik | Uyarı | OutAttribute P/Invoke'lar için dize parametrelerinde kullanma |
CA1418 | Birlikte çalışabilirlik | Uyarı | Geçerli platform dizesini kullanma |
CA1831 | Performans | Uyarı | Uygun AsSpan olduğunda dize için aralık tabanlı dizinciler yerine kullanın |
CA2013 | Güvenilirlik | Uyarı | Değer türleriyle ReferenceEquals birlikte kullanma |
CA2014 | Güvenilirlik | Uyarı | Döngülerde stackalloc kullanma |
CA2015 | Güvenilirlik | Uyarı | Türetilen türler için sonlandırıcıları tanımlama MemoryManager<T> |
CA2017 | Güvenilirlik | Uyarı | Parametre sayısı eşleşmez |
CA2018 | Güvenilirlik | Uyarı | için count bağımsız değişkeni Buffer.BlockCopy , kopya için bayt sayısını belirterek |
CA2200 | Kullanım | Uyarı | Yığın ayrıntılarını korumak için yeniden fırlatın |
CA2252 | Kullanım | Hata | Önizleme özelliklerini kabul etmek |
CA2247 | Kullanım | Uyarı | Oluşturucuya geçirilen TaskCompletionSource bağımsız değişken, yerine TaskCreationOptions enum olmalı TaskContinuationOptions |
CA2255 | Kullanım | Uyarı | özniteliği ModuleInitializer kitaplıklarda kullanılmamalı |
CA2256 | Kullanım | Uyarı | Üst arabirimlerde bildirilen tüm üyelerin -attributed arabiriminde bir DynamicInterfaceCastableImplementation uygulaması olması gerekir |
CA2257 | Kullanım | Uyarı | ile bir arabirimde tanımlanan üyeler DynamicInterfaceCastableImplementationAttribute şu şekildedir: static |
CA2258 | Kullanım | Uyarı | DynamicInterfaceCastableImplementation Visual Basic arabirimi sağlama desteklenmiyor |
Bu kuralları devre dışı bırakmak veya hatalara yükseltmek için bu kuralların önem derecesini değiştirebilirsiniz. Daha fazla kural da etkinleştirsiniz.
- Her .NET SDK sürümüne dahil edilen kuralların listesi için bkz. Çözümleyici sürümü.
- Tüm kod kalitesi kurallarının listesi için bkz. Kod kalitesi kuralları.
Ek kuralları etkinleştirme
Analiz modu , kuralların hiçbirinin, bazılarının veya hiçbirinin etkinleştirilmemiş olduğu önceden tanımlanmış bir kod analizi yapılandırmasını ifade eder. Varsayılan analiz modunda, derleme uyarıları olarakyalnızca az sayıda kural etkindir. Proje dosyasındaki analysismode > özelliğini ayarlayarak < projenizin analiz modunu değiştirebilirsiniz. İzin verilen değerler şunlardır:
None
Default
Minimum
Recommended
All
.NET 6 ' dan başlayarak, analysislevel > özelliği için < bileşik bir değer yerine analysismode > 'u atlayabilirsiniz < . Örneğin, aşağıdaki değer en son sürüm için önerilen kurallar kümesini sunar: <AnalysisLevel>latest-Recommended</AnalysisLevel>
. Daha fazla bilgi için bkz. Analysislevel.
Kullanılabilir her bir kuralın varsayılan önem derecesini bulmak ve kuralın varsayılan analiz modunda etkinleştirilip etkinleştirilmediğini anlamak için kuralların tam listesinebakın.
Uyarıları hata olarak değerlendir
Projelerinizi oluştururken bayrağını kullanırsanız -warnaserror
, tüm kod analizi uyarıları da hata olarak değerlendirilir. kod kalitesi uyarılarının (caxxxx) ' de -warnaserror
hata olarak değerlendirilmeyeceğini istemiyorsanız, MSBuild özelliğini false
proje dosyanızda olarak ayarlayabilirsiniz CodeAnalysisTreatWarningsAsErrors
.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
Herhangi bir kod çözümleme uyarısı görmeye devam edersiniz, ancak derlemenizi bozmayacaktır.
En son güncelleştirmeler
Varsayılan olarak, .NET SDK 'sının daha yeni sürümlerine yükselttiğinizde en son kod çözümleme kurallarını ve varsayılan kural önem derecelerine sahip olursunuz. Bu davranışı istemiyorsanız, örneğin, yeni kuralların etkin veya devre dışı olmamasını sağlamak istiyorsanız, bunu aşağıdaki yollarla geçersiz kılabilirsiniz:
AnalysisLevel
bu küme için uyarıları kilitlemek üzere MSBuild özelliğini belirli bir değere ayarlayın. Daha yeni bir SDK 'ya yükselttiğinizde, bu uyarılar için hata düzeltmeleri almaya devam edersiniz, ancak yeni bir uyarı etkinleştirilmeyecektir ve mevcut bir uyarı devre dışı bırakılacaktır. Örneğin, kurallar kümesini .NET SDK 'nın 5,0 sürümüyle birlikte gelen bunlarla kilitlemek için, proje dosyanıza aşağıdaki girişi ekleyin.<PropertyGroup> <AnalysisLevel>5.0</AnalysisLevel> </PropertyGroup>
İpucu
Özelliği
latest
içinAnalysisLevel
varsayılan değer, .NET SDK 'sının daha yeni sürümlerine geçtiğinizde her zaman en son kod çözümleme kurallarını alacağınız anlamına gelir.Daha fazla bilgi edinmek ve olası değerlerin bir listesini görmek için bkz. Analysislevel.
.net SDK güncelleştirmelerinden kural güncelleştirmelerini ayırmak için Microsoft. codeanalysis. netçözümleyiciler NuGet paketini yükler. .NET 5 + ' u hedefleyen projeler için, paketi yüklemek yerleşik SDK Çözümleyicileri ' ni kapatır. SDK NuGet paketinden daha yeni bir çözümleyici derleme sürümü içeriyorsa, 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. netçözümleyiciler NuGet paketini yüklerseniz, enablenetçözümleyiciler özelliğini proje dosyanıza ya da bir dizin. 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 analiz
Kod stili analiz ("ıdexxxx") kuralları, kod tabanınızda tutarlı kod stili tanımlamanızı ve bakımını sağlar. Varsayılan etkinleştirme ayarları şunlardır:
Komut satırı derlemesi: komut satırı Derlemeleriyle ilgili tüm .NET projeleri için, varsayılan olarak kod stili çözümleme devre dışıdır.
.NET 5 ' den başlayarak, derleme üzerinde kod stili analizinihem komut satırında hem de Visual Studio içinde etkinleştirebilirsiniz. Kod stili ihlalleri, uyarı veya "IDE" ön eki ile hatalar olarak görüntülenir. Bu, derleme zamanında tutarlı kod stilleri zorlamanıza olanak sağlar.
Visual Studio: kod stili analizi, varsayılan olarak, kod yeniden düzenleme hızlı eylemleriolarak Visual Studio içindeki tüm .net projeleri için etkindir.
Kod stili analiz kurallarının tam listesi için bkz. kod stili kuralları.
Derlemede etkinleştir
.NET 5 SDK ve sonraki sürümlerinde, komut satırından ve Visual Studio oluştururken kod stili analizini etkinleştirebilirsiniz. (ancak, performans nedenleriyle, tek bir kod stili kuralları yalnızca Visual Studio ıde 'de de geçerlidir.)
Derlemede kod stili analizini etkinleştirmek için şu adımları izleyin:
MSBuild özelliğini enforcecodestyleınbuild olarak
true
ayarlayın.Bir . editorconfig dosyasında, derleme üzerinde çalıştırmak istediğiniz her "IDE" kod stili kuralını bir uyarı veya hata olarak yapılandırın . Örnek:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_diagnostic.IDE0040.severity = warning
Alternatif olarak, bir kategorinin tamamını bir uyarı veya hata olması için varsayılan olarak yapılandırabilir ve ardından bu kategoride, derlemede çalıştırmak istemediğiniz kuralları seçmeli olarak kapatabilirsiniz. Örnek:
[*.{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
Not
Kod stili analiz özelliği deneysel olur ve .NET 5 ile .NET 6 sürümleri arasında değişebilir.
Bir uyarıyı gösterme
Bir kural ihlalini bastırın bir yolu, bu kural KIMLIĞI none
için önem derecesi seçeneğini bir EditorConfig dosyasında ayarlamaya yöneliktir. Örnek:
dotnet_diagnostic.CA1822.severity = none
Daha fazla bilgi ve uyarıları gizlemek için diğer yollar için bkz. Kod Analizi uyarılarını gösterme.
kod analizini GitHub eylem olarak çalıştır
dotnet/code-analysis GitHub eylemi, bir çevrimdışı modda sürekli tümleştirme (cı) kapsamında .net kod çözümleyicileri çalıştırmanızı sağlar. daha fazla bilgi için bkz. .net kod analizi GitHub eylemi.
Üçüncü taraf çözümleyiciler
Resmi .NET çözümleyicilerine ek olarak, StyleCop, roslynator, xUnit Çözümleyicilerive sonar Çözümleyicisigibi üçüncü taraf Çözümleyicileri de yükleyebilirsiniz.