C# düzenlemeleri için Dayanıklı Görev Roslyn Çözümleyicisi

Dayanıklı Görev Roslyn Çözümleyicisi, C# Dayanıklı İşlevler uygulamalarınızda orchestrator kod kısıtlamalarını takip etmenizi sağlayan anlık bir kod analizörüdür. Kodunuz üretime ulaşmadan önce derleme zamanında belirlenimci olmayan API kullanımı, yanlış bağlamalar ve tür uyuşmazlıkları gibi yaygın sorunları algılar.

Çözümleyici Microsoft.Azure.Functions.Worker.Extensions.DurableTask NuGet paketi (v1.6.0 ve üzeri) ile birlikte gelir ve varsayılan olarak etkindir. Ek kurulum gerekmez.

Dayanıklı Görev Roslyn Çözümleyicisi, C# Dayanıklı Görev SDK'sı uygulamalarınızda düzenleyici kod kısıtlamalarını izlemenize yardımcı olan canlı bir kod çözümleyicisidir. Kodunuz üretime ulaşmadan önce derleme zamanında belirlenimci olmayan API kullanımı ve tür uyuşmazlıkları gibi yaygın sorunları algılar.

Çözümleyiciyi kullanmak için NuGet paketini projenize ekleyin Microsoft.DurableTask.Analyzers :

dotnet add package Microsoft.DurableTask.Analyzers

Nasıl çalışır?

Çözümleyici Visual Studio, Visual Studio Code (C# Geliştirme Seti uzantısıyla) ve komut satırında dotnet build sırasında otomatik olarak çalışır. Düzenleyici kodunuzu inceler ve tanılamaları IDE'nizin hata listesinde ve derleme çıkışında uyarı veya hata olarak bildirir.

Açık dosyaları analiz etmek için IDE yapılandırması gerekmez. NuGet paketi projenizde bulunduğu anda çözümleyici etkinleştirilir.

Tip

Varsayılan olarak, Visual Studio yalnızca açtığınız dosyalarda çözümleyicileri çalıştırır. Çözümünüzün tamamını aynı anda analiz etmek için Araçlar>Seçenekler>Metin Düzenleyicisi>C#>Gelişmiş'e gidin ve Arka plan analizi kapsamınıTüm çözüm olarak ayarlayın.

Çözümleyici, çeşitli kurallar için Visual Studio ve VS Code'da otomatik kod düzeltmeleri (hızlı eylemler) sağlar. Örneğin, tek bir tıklamayla ile DateTime.Now değiştirilebilircontext.CurrentUtcDateTime.

Çözümleyici kuralları

Aşağıdaki bölümlerde, Dayanıklı Görev Roslyn Çözümleyicisi ile birlikte gelen ve kategoriye göre gruplandırılmış çözümleyici kuralları listelenmiştir.

Düzenleme kuralları

Bu kurallar, düzenleme yöntemleri içinde belirlenimci olmayan veya güvenli olmayan API kullanımını algılayarak orchestrator kod kısıtlamalarını zorunlu kılar.

Kural Kimliği Severity Description Kod düzeltmesi
DURABLE0001 Warning Orkestrasyonlarda belirlenimsiz DateTime özellikleri (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) algılar. Bunun yerine context.CurrentUtcDateTime kullanın. Evet
DURABLE0002 Warning Orkestrasyonlarda Guid.NewGuid() algılar. Bunun yerine context.NewGuid() kullanın. Evet
DURABLE0003 Warning Algılar Task.Delay veya Thread.Sleep orkestrasyonlar. Bunun yerine context.CreateTimer kullanın. Evet
DURABLE0004 Warning Düzenlemeler içinde belirlenimci olmayan iş parçacığı ve görev API'lerini (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) algılar. No
DURABLE0005 Warning Doğrudan orkestrasyonlarda kullanılan G/Ç API'lerini (örneğin, HttpClient, Azure Depolama istemcileri) algılar. G/Ç çağrılarını etkinliklere taşıyın. No
DURABLE0006 Warning Orkestrasyonlarda System.Environment API kullanımını (örneğin, GetEnvironmentVariable) algılar. No
DURABLE0007 Warning CancellationToken Orkestrasyon işlevi imzalarındaki parametreleri algılar. No
DURABLE0008 Warning Orkestrasyon işlevi parametrelerinde bağlı olmayan bağlamaları[OrchestrationTrigger] (örneğin, [EntityTrigger], [DurableClient]) algılar. No
DURABLE0009 Bilgi yerine context.GetInput<T>()bir giriş parametresi kullanılmasını önerir. No
DURABLE0010 Warning Orkestrasyonlarda bağlamsal olmayan ILogger kullanımı algılar. Bunun yerine context.CreateReplaySafeLogger() kullanın. No
DURABLE0011 Warning çağrılmayan while (true)ilişkisiz ContinueAsNew düzenleme döngülerini algılar. olmadan ContinueAsNew, düzenleme geçmişi süresiz olarak büyür. No
Kural Kimliği Severity Description Kod düzeltmesi
DURABLE0001 Warning Orkestrasyonlarda belirlenimsiz DateTime özellikleri (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) algılar. Bunun yerine context.CurrentUtcDateTime kullanın. Evet
DURABLE0002 Warning Orkestrasyonlarda Guid.NewGuid() algılar. Bunun yerine context.NewGuid() kullanın. Evet
DURABLE0003 Warning Algılar Task.Delay veya Thread.Sleep orkestrasyonlar. Bunun yerine context.CreateTimer kullanın. Evet
DURABLE0004 Warning Düzenlemeler içinde belirlenimci olmayan iş parçacığı ve görev API'lerini (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) algılar. No
DURABLE0005 Warning Doğrudan orkestrasyonlarda kullanılan G/Ç API'lerini (örneğin, HttpClient, Azure Depolama istemcileri) algılar. G/Ç çağrılarını etkinliklere taşıyın. No
DURABLE0006 Warning Orkestrasyonlarda System.Environment API kullanımını (örneğin, GetEnvironmentVariable) algılar. No
DURABLE0009 Bilgi yerine context.GetInput<T>()bir giriş parametresi kullanılmasını önerir. No
DURABLE0010 Warning Orkestrasyonlarda bağlamsal olmayan ILogger kullanımı algılar. Bunun yerine context.CreateReplaySafeLogger() kullanın. No
DURABLE0011 Warning çağrılmayan while (true)ilişkisiz ContinueAsNew düzenleme döngülerini algılar. olmadan ContinueAsNew, düzenleme geçmişi süresiz olarak büyür. No

Uyarı

Kurallar DURABLE0007, DURABLE0008 ve DURABLE1001-DURABLE1003 yalnızca Azure İşlevleri için geçerlidir ve tek başına Dayanıklı Görev SDK'sı çözümleyicisine dahil değildir.

Bağlama kuralları

Bu kurallar tetikleyici ve istemci bağlamalarının doğru parametre türlerine uygulandığını doğrular.

Kural Kimliği Severity Description Kod düzeltmesi
DURABLE1001 Error [OrchestrationTrigger] yalnızca TaskOrchestrationContext parametrelere uygulanmasını sağlar. Evet
DURABLE1002 Error [DurableClient] yalnızca DurableTaskClient parametrelere uygulanmasını sağlar. Evet
DURABLE1003 Error [EntityTrigger] yalnızca TaskEntityDispatcher parametrelere uygulanmasını sağlar. Evet

Etkinlik kuralları

Bu kurallar, etkinlik ve alt düzenleme çağrılarında tür uyuşmazlıklarını ve çözümlenmemiş adları denetler.

Kural Kimliği Severity Description Kod düzeltmesi
DURABLE2001 Warning Etkinlik çağrıları ve etkinlik tanımları arasındaki giriş türü uyuşmazlıklarını algılar. No
DURABLE2002 Warning Etkinlik çağrıları ve etkinlik tanımları arasındaki çıkış türü uyuşmazlıklarını algılar. No
DURABLE2003 Bilgi Bir etkinlik çağrısının derleme içinde tanımlı herhangi bir etkinlikle eşleşmeyen bir isme referans verdiğini bildirir. No
DURABLE2004 Bilgi Bir alt orkestrasyon çağrısının derlemede tanımlı herhangi bir düzenleyiciyle eşleşmeyen bir isme başvurduğunu bildirir. No

Daha fazla bilgi için GitHub analyzer sürüm notlarına bakın.

Roslyn Çözümleyicisi uyarılarını gizleme

Proje, dosya veya satır düzeyinde çözümleyici tanılamalarını gizleyebilirsiniz.

.editorconfig ile bastır

Kuralın önem derecesini değiştirmek veya tamamen devre dışı bırakmak için dosyanıza .editorconfig bir girdi ekleyin:

[*.cs]
dotnet_diagnostic.DURABLE0001.severity = none

Geçerli önem derecesi değerleri : error, warning, suggestion, silentve none.

Satır içi bastır #pragma ile

Kodun bir bölümünde belirli bir uyarıyı engellemek için kullanın #pragma warning disable :

#pragma warning disable DURABLE0001
var now = DateTime.UtcNow;
#pragma warning restore DURABLE0001

Proje düzeyinde gizleme

Projenin tamamı için bir <NoWarn> kuralı engellemek için dosyanıza .csproj bir girdi ekleyin:

<PropertyGroup>
  <NoWarn>$(NoWarn);DURABLE0001</NoWarn>
</PropertyGroup>

Eski .NET işlem içi çözümleyicisi

.NET işlem içi programlama modeli için ayrı ve eski bir Roslyn çözümleyicisi vardır. Bu çözümleyici Microsoft.Azure.WebJobs.Extensions.DurableTask paketinin bir parçasıdır ve farklı bir kural ön eki kullanır (DF yerine DURABLE). İki çözümleyici tamamen ayrı paketlerdir ve kural kimliklerini paylaşmaz.

Important

.NET işlem içi programlama modeli kullanımdan kaldırılıyor. Yeni projeler için .NET yalıtılmış çalışan modelini kullanın. Eski işlem içi çözümleyici yeni kurallar veya iyileştirmeler almaz.

İşlem içi çözümleyici kuralları (DF0101–DF0307) hakkında bilgi için Analyzer v0.2.0 sürüm sayfasına bakın.

Sonraki adım