Freigeben über


Durable Task Roslyn Analyzer (nur C#)

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 spezielle IDE-Konfiguration erforderlich. Die Analyse wird aktiviert, sobald das NuGet-Paket in Ihrem Projekt vorhanden ist.

Tipp

In Visual Studio werden standardmäßig nur Analyzer in geöffneten Dateien ausgeführt. Wenn Sie die Analyse für ihre gesamte Lösung ausführen möchten, wechseln Sie zu "Extras>Optionen>Text Editor>C#>Erweitert ", und legen Sie den Bereich "Hintergrundanalyse" auf "Gesamte Lösung" fest.

Analyseregeln

In der folgenden Tabelle sind die Analyseregeln aufgeführt, die mit dem "Durable Task Roslyn Analyzer" ausgeliefert werden. Jede Regel zielt auf eine bestimmte Verletzung von Codeeinschränkungen oder häufig auftretenden Fehlern ab.

Regel-ID Schweregrad Beschreibung
DURABLE0001 Warnung Erkennt nicht deterministische DateTime Eigenschaften (DateTime.Now, DateTime.UtcNow, , DateTime.TodayDateTimeOffset.Now, DateTimeOffset.UtcNow) in Orchestrierungen. Verwenden Sie stattdessen context.CurrentUtcDateTime.
DURABLE0002 Warnung Erkennt Guid.NewGuid() in Orchestrierungen. Verwenden Sie stattdessen context.NewGuid().
DURABLE0003 Warnung Erkennt Task.Delay oder Thread.Sleep in Orchestrierungen. Verwenden Sie stattdessen context.CreateTimer.
DURABLE0004 Warnung Erkennt nicht deterministische Thread- und Aufgaben-APIs (Thread.Start, Task.Run, Task.ContinueWithTaskFactory.StartNew) in Orchestrierungen.
DURABLE0005 Warnung Erkennt E/A-APIs (z. B. HttpClient, Azure Storage Clients), die direkt in Orchestrierungen verwendet werden. Verschieben Sie E/A-Aufrufe zu Aktivitäten.
DURABLE0006 Warnung Erkennt die Verwendung der System.Environment API (z. B. GetEnvironmentVariable) in Orchestrierungen.
DURABLE0007 Warnung CancellationToken Erkennt Parameter in Orchestrierungsfunktionssignaturen.
DURABLE0008 Warnung Erkennt nicht gebundene[OrchestrationTrigger] Werte (z. B. [EntityTrigger], [DurableClient]) in Orchestrierungsfunktionsparametern.
DURABLE0009 Info Schlägt vor, die Verwendung eines Eingabeparameters anstelle von context.GetInput<T>().
DURABLE0010 Warnung Erkennt die nichtkontextuelle ILogger-Verwendung in Orchestrierungen. Verwenden Sie stattdessen context.CreateReplaySafeLogger().
DURABLE1001 Fehler Stellt sicher, dass [OrchestrationTrigger] nur auf TaskOrchestrationContext-Parameter angewendet wird.
DURABLE1002 Fehler Stellt sicher, dass [DurableClient] nur auf DurableTaskClient-Parameter angewendet wird.
DURABLE1003 Fehler Stellt sicher, dass [EntityTrigger] nur auf TaskEntityDispatcher-Parameter angewendet wird.
DURABLE2001 Warnung Erkennt Eingabetypkonflikten zwischen Aktivitätsaufrufen und Aktivitätsdefinitionen.
DURABLE2002 Warnung Erkennt Nichtübereinstimmungen des Ausgabetyps zwischen Aktivitätsaufrufen und Aktivitätsdefinitionen.
DURABLE2003 Info Meldet, wenn ein Aktivitätsaufruf auf einen Namen verweist, der keiner definierten Aktivität in der Kompilierung entspricht.
DURABLE2004 Info Meldet, wenn ein Unterorchesteraufruf auf einen Namen verweist, der keinem definierten Orchestrator in der Kompilierung entspricht.
Regel-ID Schweregrad Beschreibung
DURABLE0001 Warnung Erkennt nicht deterministische DateTime Eigenschaften (DateTime.Now, DateTime.UtcNow, , DateTime.TodayDateTimeOffset.Now, DateTimeOffset.UtcNow) in Orchestrierungen. Verwenden Sie stattdessen context.CurrentUtcDateTime.
DURABLE0002 Warnung Erkennt Guid.NewGuid() in Orchestrierungen. Verwenden Sie stattdessen context.NewGuid().
DURABLE0003 Warnung Erkennt Task.Delay oder Thread.Sleep in Orchestrierungen. Verwenden Sie stattdessen context.CreateTimer.
DURABLE0004 Warnung Erkennt nicht deterministische Thread- und Aufgaben-APIs (Thread.Start, Task.Run, Task.ContinueWithTaskFactory.StartNew) in Orchestrierungen.
DURABLE0005 Warnung Erkennt E/A-APIs (z. B. HttpClient, Azure Storage Clients), die direkt in Orchestrierungen verwendet werden. Verschieben Sie E/A-Aufrufe zu Aktivitäten.
DURABLE0006 Warnung Erkennt die Verwendung der System.Environment API (z. B. GetEnvironmentVariable) in Orchestrierungen.
DURABLE0009 Info Schlägt vor, die Verwendung eines Eingabeparameters anstelle von context.GetInput<T>().
DURABLE0010 Warnung Erkennt die nichtkontextuelle ILogger-Verwendung in Orchestrierungen. Verwenden Sie stattdessen context.CreateReplaySafeLogger().
DURABLE2001 Warnung Erkennt Eingabetypkonflikten zwischen Aktivitätsaufrufen und Aktivitätsdefinitionen.
DURABLE2002 Warnung Erkennt Nichtübereinstimmungen des Ausgabetyps zwischen Aktivitätsaufrufen und Aktivitätsdefinitionen.
DURABLE2003 Info Meldet, wenn ein Aktivitätsaufruf auf einen Namen verweist, der keiner definierten Aktivität in der Kompilierung entspricht.
DURABLE2004 Info Meldet, wenn ein Unterorchesteraufruf auf einen Namen verweist, der keinem definierten Orchestrator in der Kompilierung entspricht.

Hinweis

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

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

Unterdrücken von Analysewarnungen

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. Dieser Analyzer ist Teil des Microsoft.Azure.WebJobs.Extensions.DurableTask-Pakets und verfügt über einen anderen Satz von Regeln.

Von Bedeutung

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 finden Sie auf der Analyzer v0.2.0-Release-Seite.

Nächster Schritt