Durable Task Roslyn Analyzer für C#-Orchestrierungen

Der Durable Task Roslyn Analyzer ist ein Live-Codeanalysator, mit dem Sie orchestrator-Codeeinschränkungen in Ihren C#-Durable Functions-Apps verfolgen können. Es erkennt häufige Probleme wie nicht deterministische API-Verwendung, falsche Bindungen und Typenkonflikten zur Buildzeit, bevor Ihr Code die Produktion erreicht.

Der Analyzer wird mit dem Microsoft.Azure.Functions.Worker.Extensions.DurableTask NuGet-Paket (v1.6.0 und höher) gebündelt und ist standardmäßig aktiviert. Es ist keine zusätzliche Einrichtung erforderlich.

Der Durable Task Roslyn Analyzer ist eine Live-Codeanalyse, mit der Sie Orchestrator-Codeeinschränkungen in Ihren C# Durable Task SDK-Apps befolgen können. Es erkennt häufige Probleme wie die nicht deterministische API-Verwendung und Typenkonflikten zur Buildzeit, bevor Ihr Code die Produktion erreicht.

Um die Analyse zu verwenden, fügen Sie das Microsoft.DurableTask.Analyzers NuGet-Paket zu Ihrem Projekt hinzu:

dotnet add package Microsoft.DurableTask.Analyzers

So funktioniert es

Der Analyzer wird automatisch in Visual Studio, Visual Studio Code (mit der C#Dev Kit-Erweiterung) und während dotnet build in der Befehlszeile ausgeführt. Es prüft den Orchestratorcode und meldet Diagnoseinformationen als Warnungen oder Fehler in der Fehlerliste Ihrer IDE sowie in der Buildausgabe.

Es ist keine IDE-Konfiguration erforderlich, um geöffnete Dateien zu analysieren. Die Analyse wird aktiviert, sobald das NuGet-Paket in Ihrem Projekt vorhanden ist.

Tip

Standardmäßig werden Visual Studio nur Analysegeräte für dateien ausgeführt, die Geöffnet sind. Um Ihre gesamte Lösung gleichzeitig zu analysieren, wechseln Sie zu Extras>Optionen>Text Editor>C#>Erweitert , und legen Sie den Bereich der Hintergrundanalyse auf "Gesamte Lösung" fest.

Für mehrere Regeln stellt der Analyzer auch automatische Codefixes (schnelle Aktionen) in Visual Studio und VS-Code bereit. Sie kann z. B. durch einen einzigen Klick ersetzt werden DateTime.Nowcontext.CurrentUtcDateTime .

Analyseregeln

In den folgenden Abschnitten werden die Analyseregeln aufgeführt, die mit dem "Durable Task Roslyn Analyzer" ausgeliefert werden, gruppiert nach Kategorie.

Orchestrierungsregeln

Diese Regeln erzwingen Orchestratorcodeeinschränkungen , indem nicht deterministische oder unsichere API-Verwendung innerhalb von Orchestrierungsmethoden erkannt wird.

Regel-ID Severity Description Codekorrektur
DURABLE0001 Warning Erkennt nicht deterministische DateTime Eigenschaften (DateTime.Now, DateTime.UtcNow, , DateTime.TodayDateTimeOffset.Now, DateTimeOffset.UtcNow) in Orchestrierungen. Verwenden Sie stattdessen context.CurrentUtcDateTime. Ja
DURABLE0002 Warning Erkennt Guid.NewGuid() in Orchestrierungen. Verwenden Sie stattdessen context.NewGuid(). Ja
DURABLE0003 Warning Erkennt Task.Delay oder Thread.Sleep in Orchestrierungen. Verwenden Sie stattdessen context.CreateTimer. Ja
DURABLE0004 Warning Erkennt nicht deterministische Thread- und Aufgaben-APIs (Thread.Start, Task.Run, Task.ContinueWithTaskFactory.StartNew) in Orchestrierungen. No
DURABLE0005 Warning Erkennt E/A-APIs (z. B. HttpClient, Azure Storage Clients), die direkt in Orchestrierungen verwendet werden. Verschieben Sie E/A-Aufrufe zu Aktivitäten. No
DURABLE0006 Warning Erkennt die Verwendung der System.Environment API (z. B. GetEnvironmentVariable) in Orchestrierungen. No
DURABLE0007 Warning CancellationToken Erkennt Parameter in Orchestrierungsfunktionssignaturen. No
DURABLE0008 Warning Erkennt nicht gebundene[OrchestrationTrigger] Werte (z. B. [EntityTrigger], [DurableClient]) in Orchestrierungsfunktionsparametern. No
DURABLE0009 Info Schlägt vor, die Verwendung eines Eingabeparameters anstelle von context.GetInput<T>(). No
DURABLE0010 Warning Erkennt die nichtkontextuelle ILogger-Verwendung in Orchestrierungen. Verwenden Sie stattdessen context.CreateReplaySafeLogger(). No
DURABLE0011 Warning Erkennt ungebundene while (true) Orchestrierungsschleifen, die nicht aufgerufen ContinueAsNewwerden. Ohne ContinueAsNew, die Orchestrierungsgeschichte wächst unbegrenzt. No
Regel-ID Severity Description Codekorrektur
DURABLE0001 Warning Erkennt nicht deterministische DateTime Eigenschaften (DateTime.Now, DateTime.UtcNow, , DateTime.TodayDateTimeOffset.Now, DateTimeOffset.UtcNow) in Orchestrierungen. Verwenden Sie stattdessen context.CurrentUtcDateTime. Ja
DURABLE0002 Warning Erkennt Guid.NewGuid() in Orchestrierungen. Verwenden Sie stattdessen context.NewGuid(). Ja
DURABLE0003 Warning Erkennt Task.Delay oder Thread.Sleep in Orchestrierungen. Verwenden Sie stattdessen context.CreateTimer. Ja
DURABLE0004 Warning Erkennt nicht deterministische Thread- und Aufgaben-APIs (Thread.Start, Task.Run, Task.ContinueWithTaskFactory.StartNew) in Orchestrierungen. No
DURABLE0005 Warning Erkennt E/A-APIs (z. B. HttpClient, Azure Storage Clients), die direkt in Orchestrierungen verwendet werden. Verschieben Sie E/A-Aufrufe zu Aktivitäten. No
DURABLE0006 Warning Erkennt die Verwendung der System.Environment API (z. B. GetEnvironmentVariable) in Orchestrierungen. No
DURABLE0009 Info Schlägt vor, die Verwendung eines Eingabeparameters anstelle von context.GetInput<T>(). No
DURABLE0010 Warning Erkennt die nichtkontextuelle ILogger-Verwendung in Orchestrierungen. Verwenden Sie stattdessen context.CreateReplaySafeLogger(). No
DURABLE0011 Warning Erkennt ungebundene while (true) Orchestrierungsschleifen, die nicht aufgerufen ContinueAsNewwerden. Ohne ContinueAsNew, die Orchestrierungsgeschichte wächst unbegrenzt. No

Note

Regeln DURABLE0007, DURABLE0008 und DURABLE1001-DURABLE1003 gelten nur für Azure Functions und sind nicht im eigenständigen Durable Task SDK-Analysator enthalten.

Bindungsregeln

Diese Regeln überprüfen, ob Trigger- und Clientbindungen auf die richtigen Parametertypen angewendet werden.

Regel-ID Severity Description Codekorrektur
DURABLE1001 Fehler Stellt sicher, dass [OrchestrationTrigger] nur auf TaskOrchestrationContext-Parameter angewendet wird. Ja
DURABLE1002 Fehler Stellt sicher, dass [DurableClient] nur auf DurableTaskClient-Parameter angewendet wird. Ja
DURABLE1003 Fehler Stellt sicher, dass [EntityTrigger] nur auf TaskEntityDispatcher-Parameter angewendet wird. Ja

Aktivitätsregeln

Diese Regeln überprüfen, ob Typenkonflikten und nicht aufgelöste Namen in Aktivitäts- und Unter-Orchestrierungsaufrufen auftreten.

Regel-ID Severity Description Codekorrektur
DURABLE2001 Warning Erkennt Eingabetypkonflikten zwischen Aktivitätsaufrufen und Aktivitätsdefinitionen. No
DURABLE2002 Warning Erkennt Nichtübereinstimmungen des Ausgabetyps zwischen Aktivitätsaufrufen und Aktivitätsdefinitionen. No
DURABLE2003 Info Meldet, wenn ein Aktivitätsaufruf auf einen Namen verweist, der keiner definierten Aktivität in der Kompilierung entspricht. No
DURABLE2004 Info Meldet, wenn ein Unterorchesteraufruf auf einen Namen verweist, der keinem definierten Orchestrator in der Kompilierung entspricht. No

Weitere Informationen finden Sie in den analyzer-Versionshinweisen auf GitHub.

Roslyn Analyzer-Warnungen unterdrücken

Sie können die Analysediagnose auf Projekt-, Datei- oder Zeilenebene unterdrücken.

Unterdrücken mit .editorconfig

Fügen Sie ihrer .editorconfig Datei einen Eintrag hinzu, um den Schweregrad einer Regel zu ändern oder sie vollständig zu deaktivieren:

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

Gültige Schweregradwerte sind error, , warning, suggestion, silentund none.

Mit #pragma inline unterdrücken

Dient #pragma warning disable zum Unterdrücken einer bestimmten Warnung in einem Codeabschnitt:

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

Unterdrücken auf Projektebene

Fügen Sie Ihrer <NoWarn>-Datei einen .csproj-Eintrag hinzu, um eine Regel für das gesamte Projekt zu unterdrücken.

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

Legacy-.NET In-Process Analyzer

Ein separater, älterer Roslyn Analyzer ist für das Programmiermodell .NET in-process vorhanden. Diese Analyse ist Teil des pakets Microsoft.Azure.WebJobs.Extensions.DurableTask und verwendet ein anderes Regelpräfix (DF anstelle von DURABLE). Die beiden Analysegeräte sind vollständig separate Pakete und teilen keine Regel-IDs.

Important

Das .NET In-Process-Programmiermodell wird eingestellt. Verwenden Sie das .NET isolierte Worker-Modell für neue Projekte. Die ältere In-Process-Analyse erhält keine neuen Regeln oder Verbesserungen.

Informationen zu den In-Process Analyzer-Regeln (DF0101–DF0307) finden Sie auf der Analyzer v0.2.0-Releaseseite.

Nächster Schritt