Analyseur Roslyn de tâche durable pour les orchestrations C#

Durable Task Roslyn Analyzer est un analyseur de code en direct qui vous aide à suivre les contraintes de code orchestrator dans vos applications Durable Functions C#. Il détecte les problèmes courants tels que l’utilisation d’API non déterministe, les liaisons incorrectes et les incompatibilités de type au moment de la génération, avant que votre code atteigne la production.

L’analyseur est groupé avec le package NuGet Microsoft.Azure.Functions.Worker.Extensions.DurableTask (v1.6.0 et versions ultérieures) et est activé par défaut. Aucune configuration supplémentaire n’est requise.

Durable Task Roslyn Analyzer est un analyseur de code en direct qui vous aide à suivre les contraintes de code d’orchestrateur dans vos applications sdk C# Durable Task. Il détecte les problèmes courants tels que l’utilisation d’API non déterministe et les incompatibilités de type au moment de la génération, avant que votre code atteigne la production.

Pour utiliser l’analyseur, ajoutez le Microsoft.DurableTask.Analyzers package NuGet à votre projet :

dotnet add package Microsoft.DurableTask.Analyzers

Fonctionnement

L’analyseur s’exécute automatiquement dans Visual Studio, Visual Studio Code (avec l’extension du Kit de développement C#) et pendant dotnet build sur la ligne de commande. Il inspecte votre code d’orchestrateur et signale les diagnostics en tant qu’avertissements ou erreurs dans la liste d’erreurs de votre IDE et dans la sortie de build.

Aucune configuration IDE n’est requise pour analyser les fichiers ouverts. L’analyseur s’active dès que le package NuGet est présent dans votre projet.

Conseil / Astuce

Par défaut, Visual Studio exécute uniquement les analyseurs sur les fichiers que vous avez ouverts. Pour analyser l’intégralité de votre solution à la fois, accédez àl’Éditeur> de texteOptions>outils>C#>Avancé et définissez l’étendue d’analyse en arrière-plan sur la solution entière.

Pour plusieurs règles, l’analyseur fournit également des correctifs de code automatiques (actions rapides) dans Visual Studio et VS Code. Par exemple, il peut remplacer DateTime.Nowcontext.CurrentUtcDateTime par un seul clic.

Règles de l'analyseur

Les sections suivantes répertorient les règles d’analyseur fournies avec l’analyseur Roslyn de tâche durable, regroupées par catégorie.

Règles d’orchestration

Ces règles appliquent des contraintes de code d’orchestrateur en détectant l’utilisation non déterministe ou non sécurisée de l’API dans les méthodes d’orchestration.

ID de règle Niveau de gravité Description Correction de code
DURABLE0001 Avertissement Détecte les propriétés non déterministes DateTime (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) dans les orchestrations. Utilisez context.CurrentUtcDateTime à la place. Oui
DURABLE0002 Avertissement Détecte Guid.NewGuid() dans les orchestrations. Utilisez context.NewGuid() à la place. Oui
DURABLE0003 Avertissement Détecte Task.Delay ou Thread.Sleep dans des orchestrations. Utilisez context.CreateTimer à la place. Oui
DURABLE0004 Avertissement Détecte les API de thread et de tâche non déterministes (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) dans les orchestrations. Non
DURABLE0005 Avertissement Détecte les API d’E/S (par exemple, HttpClient, stockage Azure clients) utilisées directement dans les orchestrations. Déplacez les appels d’E/S vers les activités. Non
DURABLE0006 Avertissement Détecte l’utilisation System.Environment de l’API (par exemple GetEnvironmentVariable) dans les orchestrations. Non
DURABLE0007 Avertissement Détecte les paramètres dans les CancellationToken signatures de fonction d’orchestration. Non
DURABLE0008 Avertissement Détecte les non-liaisons[OrchestrationTrigger] (par exemple, [EntityTrigger], [DurableClient]) dans les paramètres de fonction d’orchestration. Non
DURABLE0009 Informations Suggère d’utiliser un paramètre d’entrée au lieu de context.GetInput<T>(). Non
DURABLE0010 Avertissement Détecte l’utilisation non contextuelle ILogger dans les orchestrations. Utilisez context.CreateReplaySafeLogger() à la place. Non
DURABLE0011 Avertissement Détecte les boucles d’orchestration non liées while (true) qui n’appellent ContinueAsNewpas . Sans ContinueAsNew, l’historique de l’orchestration augmente indéfiniment. Non
ID de règle Niveau de gravité Description Correction de code
DURABLE0001 Avertissement Détecte les propriétés non déterministes DateTime (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) dans les orchestrations. Utilisez context.CurrentUtcDateTime à la place. Oui
DURABLE0002 Avertissement Détecte Guid.NewGuid() dans les orchestrations. Utilisez context.NewGuid() à la place. Oui
DURABLE0003 Avertissement Détecte Task.Delay ou Thread.Sleep dans des orchestrations. Utilisez context.CreateTimer à la place. Oui
DURABLE0004 Avertissement Détecte les API de thread et de tâche non déterministes (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) dans les orchestrations. Non
DURABLE0005 Avertissement Détecte les API d’E/S (par exemple, HttpClient, stockage Azure clients) utilisées directement dans les orchestrations. Déplacez les appels d’E/S vers les activités. Non
DURABLE0006 Avertissement Détecte l’utilisation System.Environment de l’API (par exemple GetEnvironmentVariable) dans les orchestrations. Non
DURABLE0009 Informations Suggère d’utiliser un paramètre d’entrée au lieu de context.GetInput<T>(). Non
DURABLE0010 Avertissement Détecte l’utilisation non contextuelle ILogger dans les orchestrations. Utilisez context.CreateReplaySafeLogger() à la place. Non
DURABLE0011 Avertissement Détecte les boucles d’orchestration non liées while (true) qui n’appellent ContinueAsNewpas . Sans ContinueAsNew, l’historique de l’orchestration augmente indéfiniment. Non

Note

Les règles DURABLE0007, DURABLE0008 et DURABLE1001-DURABLE1003 s'appliquent uniquement à Azure Functions et ne sont pas incluses dans l'analyseur du KIT de développement logiciel (SDK) Durable Task autonome.

Règles de liaison

Ces règles valident que les liaisons de déclencheur et de client sont appliquées aux types de paramètres appropriés.

ID de règle Niveau de gravité Description Correction de code
DURABLE1001 Error Garantie que [OrchestrationTrigger] est appliqué uniquement aux paramètres TaskOrchestrationContext. Oui
DURABLE1002 Error Garantie que [DurableClient] est appliqué uniquement aux paramètres DurableTaskClient. Oui
DURABLE1003 Error Garantie que [EntityTrigger] est appliqué uniquement aux paramètres TaskEntityDispatcher. Oui

Règles d’activité

Ces règles vérifient les incompatibilités de type et les noms non résolus dans les appels d’activité et de sous-orchestration.

ID de règle Niveau de gravité Description Correction de code
DURABLE2001 Avertissement Détecte les incompatibilités de type d’entrée entre les appels d’activité et les définitions d’activité. Non
DURABLE2002 Avertissement Détecte les incompatibilités de type de sortie entre les appels d’activité et les définitions d’activité. Non
DURABLE2003 Informations Signale lorsqu’un appel d’activité fait référence à un nom qui ne correspond à aucune activité définie dans la compilation. Non
DURABLE2004 Informations Signale lorsqu’un appel de sous-orchestration fait référence à un nom qui ne correspond à aucun orchestrateur défini dans la compilation. Non

Pour plus d’informations, consultez les notes de publication analyzer sur GitHub.

Supprimer les avertissements roslyn Analyzer

Vous pouvez supprimer les diagnostics d’analyseur au niveau du projet, du fichier ou de la ligne.

Supprimer avec .editorconfig

Ajoutez une entrée à votre .editorconfig fichier pour modifier la gravité d’une règle ou désactivez-la entièrement :

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

Les valeurs de gravité valides sont error, , warningsuggestion, silent, et none.

Supprimer en ligne avec #pragma

Permet #pragma warning disable de supprimer un avertissement spécifique dans une section de code :

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

Supprimer au niveau du projet

Ajoutez une <NoWarn> entrée à votre .csproj fichier pour supprimer une règle pour l’ensemble du projet :

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

Analyseur in-process hérité .NET

Un analyseur Roslyn distinct et ancien existe pour le modèle de programmation .NET in-process. Cet analyseur fait partie du package Microsoft.Azure.WebJobs.Extensions.DurableTask et utilise un préfixe de règle différent (DF au lieu de DURABLE). Les deux analyseurs sont entièrement distincts et ne partagent pas d’ID de règle.

Important

Le .NET modèle de programmation in-process est mis hors service. Utilisez le modèle de travailleur isolé .NET pour les nouveaux projets. L’analyseur in-process hérité ne reçoit pas de nouvelles règles ni améliorations.

Pour plus d’informations sur les règles d’analyseur in-process (DF0101-DF0307), consultez la page de publication Analyzer v0.2.0.

Étape suivante