Durable Task Roslyn Analyzer voor C#-indelingen

Durable Task Roslyn Analyzer is een live code analyzer waarmee u orchestrator codebeperkingen in uw C#-Durable Functions-apps kunt volgen. Er worden veelvoorkomende problemen gedetecteerd, zoals niet-deterministisch API-gebruik, onjuiste bindingen en typefouten tijdens de build, voordat uw code productie bereikt.

De analyzer is gebundeld met het Microsoft.Azure.Functions.Worker.Extensions.DurableTask NuGet-pakket (v1.6.0 en hoger) en is standaard ingeschakeld. Er is geen extra installatie vereist.

De Durable Task Roslyn Analyzer is een live codeanalyse waarmee u orchestratorcodebeperkingen in uw C# Durable Task SDK-apps kunt volgen. Er worden veelvoorkomende problemen gedetecteerd, zoals niet-deterministisch API-gebruik en typefouten tijdens de build, voordat uw code productie bereikt.

Als u de analyse wilt gebruiken, voegt u het Microsoft.DurableTask.Analyzers NuGet-pakket toe aan uw project:

dotnet add package Microsoft.DurableTask.Analyzers

Hoe werkt het?

De analyzer wordt automatisch uitgevoerd in Visual Studio, Visual Studio Code (met de C# Dev Kit-extensie) en tijdens dotnet build op de opdrachtregel. Hiermee wordt uw orchestratorcode gecontroleerd en worden diagnostische gegevens gerapporteerd als waarschuwingen of fouten in de foutenlijst van uw IDE en in de build-uitvoer.

Er is geen IDE-configuratie vereist voor het analyseren van geopende bestanden. De analyzer wordt geactiveerd zodra het NuGet-pakket aanwezig is in uw project.

Aanbeveling

Standaard worden Visual Studio alleen analyses uitgevoerd op bestanden die u hebt geopend. Als u uw hele oplossing tegelijk wilt analyseren, gaat u naar Extra Opties>>teksteditor>C#>Geavanceerd en stelt u het bereik Achtergrondanalyse in op Volledige oplossing.

Voor verschillende regels biedt de analyzer ook automatische codecorrecties (snelle acties) in Visual Studio en VS Code. Het kan bijvoorbeeld in één klik worden vervangen DateTime.Now door context.CurrentUtcDateTime .

Analyseregels

In de volgende secties worden de analyseregels vermeld die worden verzonden met de Durable Task Roslyn Analyzer, gegroepeerd op categorie.

Indelingsregels

Met deze regels worden orchestratorcodebeperkingen afgedwongen door niet-deterministisch of onveilig API-gebruik binnen indelingsmethoden te detecteren.

Regel-id Severity Beschrijving Oplossing voor code
DURABLE0001 Waarschuwing Detecteert niet-deterministische DateTime eigenschappen (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) in orkestraties. Gebruik in plaats daarvan context.CurrentUtcDateTime. Yes
DURABLE0002 Waarschuwing Detecteert Guid.NewGuid() in orkestraties. Gebruik in plaats daarvan context.NewGuid(). Yes
DURABLE0003 Waarschuwing Detecteert Task.Delay of Thread.Sleep in orkestraties. Gebruik in plaats daarvan context.CreateTimer. Yes
DURABLE0004 Waarschuwing Detecteert niet-deterministische threads en taak-API's (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) in orkestraties. No
DURABLE0005 Waarschuwing Detecteert I/O-API's (bijvoorbeeld HttpClient, Azure Storage-clients) die rechtstreeks in indelingen worden gebruikt. I/O-aanroepen naar activiteiten verplaatsen. No
DURABLE0006 Waarschuwing Detecteert System.Environment API-gebruik (bijvoorbeeld GetEnvironmentVariable) in orkestraties. No
DURABLE0007 Waarschuwing Detecteert parameters in orkestratiefunctiehandtekeningen CancellationToken. No
DURABLE0008 Waarschuwing Detecteert niet-[OrchestrationTrigger] bindings (bijvoorbeeld [EntityTrigger], [DurableClient]) in orkestratiefunctieparameters. No
DURABLE0009 Informatie Suggesties voor het gebruik van een invoerparameter in plaats van context.GetInput<T>(). No
DURABLE0010 Waarschuwing Detecteert niet-contextueel ILogger gebruik in orkestraties. Gebruik in plaats daarvan context.CreateReplaySafeLogger(). No
DURABLE0011 Waarschuwing Detecteert niet-gebonden while (true) indelingslussen die niet worden aangeroepen ContinueAsNew. Zonder ContinueAsNewgroeit de indelingsgeschiedenis voor onbepaalde tijd. No
Regel-id Severity Beschrijving Oplossing voor code
DURABLE0001 Waarschuwing Detecteert niet-deterministische DateTime eigenschappen (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) in orkestraties. Gebruik in plaats daarvan context.CurrentUtcDateTime. Yes
DURABLE0002 Waarschuwing Detecteert Guid.NewGuid() in orkestraties. Gebruik in plaats daarvan context.NewGuid(). Yes
DURABLE0003 Waarschuwing Detecteert Task.Delay of Thread.Sleep in orkestraties. Gebruik in plaats daarvan context.CreateTimer. Yes
DURABLE0004 Waarschuwing Detecteert niet-deterministische threads en taak-API's (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) in orkestraties. No
DURABLE0005 Waarschuwing Detecteert I/O-API's (bijvoorbeeld HttpClient, Azure Storage-clients) die rechtstreeks in indelingen worden gebruikt. I/O-aanroepen naar activiteiten verplaatsen. No
DURABLE0006 Waarschuwing Detecteert System.Environment API-gebruik (bijvoorbeeld GetEnvironmentVariable) in orkestraties. No
DURABLE0009 Informatie Suggesties voor het gebruik van een invoerparameter in plaats van context.GetInput<T>(). No
DURABLE0010 Waarschuwing Detecteert niet-contextueel ILogger gebruik in orkestraties. Gebruik in plaats daarvan context.CreateReplaySafeLogger(). No
DURABLE0011 Waarschuwing Detecteert niet-gebonden while (true) indelingslussen die niet worden aangeroepen ContinueAsNew. Zonder ContinueAsNewgroeit de indelingsgeschiedenis voor onbepaalde tijd. No

Opmerking

Regels DURABLE0007, DURABLE0008 en DURABLE1001-DURABLE1003 zijn alleen van toepassing op Azure Functions en zijn niet opgenomen in de zelfstandige Durable Task SDK-analyse.

Bindingsregels

Deze regels valideren dat trigger- en clientbindingen worden toegepast op de juiste parametertypen.

Regel-id Severity Beschrijving Oplossing voor code
DURABLE1001 Fout Zorgt ervoor dat [OrchestrationTrigger] alleen wordt toegepast op de TaskOrchestrationContext parameters. Yes
DURABLE1002 Fout Zorgt ervoor dat [DurableClient] alleen wordt toegepast op de DurableTaskClient parameters. Yes
DURABLE1003 Fout Zorgt ervoor dat [EntityTrigger] alleen wordt toegepast op de TaskEntityDispatcher parameters. Yes

Activiteitsregels

Met deze regels wordt gecontroleerd of het type niet overeenkomt en niet-opgeloste namen in activiteiten- en subindelingsaanroepen.

Regel-id Severity Beschrijving Oplossing voor code
DURABLE2001 Waarschuwing Detecteert mismatches van inputtypen tussen activiteitenaanroepen en activiteiten-definities. No
DURABLE2002 Waarschuwing Detecteert niet-overeenkomende uitvoertypen tussen activiteitsaanroepen en activiteitsdefinities. No
DURABLE2003 Informatie Rapporteert wanneer een activiteitsaanroep verwijst naar een naam die niet overeenkomt met een gedefinieerde activiteit in de compilatie. No
DURABLE2004 Informatie Rapporteert wanneer een sub-orkestratieaanroep verwijst naar een naam die niet overeenkomt met een gedefinieerde orkestrator in de compilatie. No

Zie de releaseopmerkingen voor analyzer op GitHub voor meer informatie.

Roslyn Analyzer-waarschuwingen onderdrukken

U kunt analysediagnose onderdrukken op project-, bestand- of lijnniveau.

Onderdrukken met .editorconfig

Voeg een vermelding toe aan uw .editorconfig bestand om de ernst van een regel te wijzigen of deze volledig uit te schakelen:

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

Geldige ernstwaarden zijnerror, warning, suggestion, en silentnone.

Inline onderdrukken met #pragma

Gebruik #pragma warning disable dit om een specifieke waarschuwing in een codesectie te onderdrukken:

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

Onderdrukken op projectniveau

Voeg een <NoWarn> vermelding toe aan het .csproj bestand om een regel voor het hele project te onderdrukken:

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

Verouderde .NET in-proces-analyser

Er bestaat een afzonderlijke, oudere Roslyn-analyse voor het .NET in-process programmeermodel. Deze analyse maakt deel uit van het pakket Microsoft.Azure.WebJobs.Extensions.DurableTask en maakt gebruik van een ander regelvoorvoegsel (DF in plaats van DURABLE). De twee analyseanalyses zijn volledig afzonderlijke pakketten en delen geen regel-id's.

Belangrijk

Het .NET in-process programmeermodel wordt buiten gebruik gesteld. Gebruik het .NET geïsoleerde werkrolmodel voor nieuwe projecten. De verouderde in-process analyzer ontvangt geen nieuwe regels of verbeteringen.

Zie de releasepagina Analyzer v0.2.0 voor informatie over de regels voor in-process analyzer (DF0101-DF0307).

Volgende stap