.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 DynamicInterfaceCastableImplementationuygulaması 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.

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:

  • AnalysisLevelbu 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çin AnalysisLevel 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 olarak true 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:

  1. MSBuild özelliğini enforcecodestyleınbuild olarak true ayarlayın.

  2. 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.

Ayrıca bkz.