Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Durable Task Roslyn Analyzer è un analizzatore di codice live che consente di seguire i vincoli di codice orchestrator nelle app C# Durable Functions. Rileva problemi comuni, ad esempio l'utilizzo delle API non deterministiche, le associazioni errate e le mancate corrispondenze del tipo in fase di compilazione, prima che il codice raggiunga la produzione.
L'analizzatore è incluso nel pacchetto NuGet Microsoft.Azure.Functions.Worker.Extensions.DurableTask (v1.6.0 e versioni successive) ed è abilitato per impostazione predefinita. Non è necessaria alcuna configurazione aggiuntiva.
Durable Task Roslyn Analyzer è un analizzatore di codice live che consente di seguire i vincoli di codice dell'agente di orchestrazione nelle app C# Durable Task SDK. Rileva problemi comuni, ad esempio l'utilizzo delle API non deterministiche e le mancate corrispondenze del tipo in fase di compilazione, prima che il codice raggiunga la produzione.
Per usare l'analizzatore, aggiungere il Microsoft.DurableTask.Analyzers pacchetto NuGet al progetto:
dotnet add package Microsoft.DurableTask.Analyzers
Come funziona
L'analizzatore viene eseguito automaticamente in Visual Studio, Visual Studio Code (con l'estensione C# Dev Kit) e durante dotnet build nella riga di comando. Esamina il codice dell'orchestratore e riporta la diagnostica come avvisi o errori nell'elenco degli errori dell'IDE e nell'uscita di compilazione.
Non è necessaria alcuna configurazione dell'IDE per analizzare i file aperti. L'analizzatore viene attivato non appena il pacchetto NuGet è presente nel progetto.
Suggerimento
Per impostazione predefinita, Visual Studio esegue solo analizzatori sui file aperti. Per analizzare l'intera soluzione contemporaneamente, passare a Strumenti>Opzioni>Editor> di testoC#>Avanzate e impostare Ambito di analisi in background su Intera soluzione.
Per diverse regole, l'analizzatore fornisce anche correzioni di codice automatiche (azioni rapide) in Visual Studio e VS Code. Ad esempio, può sostituire DateTime.Now con context.CurrentUtcDateTime in un singolo clic.
Regole dell'analizzatore
Le sezioni seguenti elencano le regole dell'analizzatore fornite con Durable Task Roslyn Analyzer, raggruppate per categoria.
Regole di orchestrazione
Queste regole applicano vincoli di codice dell'agente di orchestrazione rilevando l'utilizzo di API non deterministiche o non sicure all'interno di metodi di orchestrazione.
| ID Regola | Severity | Descrizione | Correzione del codice |
|---|---|---|---|
| DURABLE0001 | Avvertimento | Rileva proprietà non deterministiche DateTime (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) nelle orchestrazioni. Utilizzare invece context.CurrentUtcDateTime. |
Yes |
| DURABLE0002 | Avvertimento | Rileva Guid.NewGuid() nelle orchestrazioni. Utilizzare invece context.NewGuid(). |
Yes |
| DURABLE0003 | Avvertimento |
Task.Delay Rileva Thread.Sleep nelle orchestrazioni. Utilizzare invece context.CreateTimer. |
Yes |
| DURABLE0004 | Avvertimento | Rileva le API non deterministiche per thread e task (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) nelle orchestrazioni. |
No |
| DURABLE0005 | Avvertimento | Rileva le API di I/O (ad esempio, HttpClient, Archiviazione di Azure client) usate direttamente nelle orchestrazioni. Spostare le chiamate di I/O alle attività. |
No |
| DURABLE0006 | Avvertimento | Rileva l'utilizzo dell'API System.Environment , ad esempio , GetEnvironmentVariablenelle orchestrazioni. |
No |
| DURABLE0007 | Avvertimento | Rileva i CancellationToken parametri nelle firme delle funzioni di orchestrazione. |
No |
| DURABLE0008 | Avvertimento | Rileva associazioni non[OrchestrationTrigger] , ad esempio [EntityTrigger], [DurableClient]nei parametri della funzione di orchestrazione. |
No |
| DURABLE0009 | Informazioni | Suggerisce l'uso di un parametro di input anziché di context.GetInput<T>(). |
No |
| DURABLE0010 | Avvertimento | Rileva l'utilizzo non contestuale ILogger nelle orchestrazioni. Utilizzare invece context.CreateReplaySafeLogger(). |
No |
| DURABLE0011 | Avvertimento | Rileva cicli di orchestrazione non associati while (true) che non chiamano ContinueAsNew. Senza ContinueAsNew, la cronologia dell'orchestrazione cresce per un periodo illimitato. |
No |
| ID Regola | Severity | Descrizione | Correzione del codice |
|---|---|---|---|
| DURABLE0001 | Avvertimento | Rileva proprietà non deterministiche DateTime (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) nelle orchestrazioni. Utilizzare invece context.CurrentUtcDateTime. |
Yes |
| DURABLE0002 | Avvertimento | Rileva Guid.NewGuid() nelle orchestrazioni. Utilizzare invece context.NewGuid(). |
Yes |
| DURABLE0003 | Avvertimento |
Task.Delay Rileva Thread.Sleep nelle orchestrazioni. Utilizzare invece context.CreateTimer. |
Yes |
| DURABLE0004 | Avvertimento | Rileva le API non deterministiche per thread e task (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) nelle orchestrazioni. |
No |
| DURABLE0005 | Avvertimento | Rileva le API di I/O (ad esempio, HttpClient, Archiviazione di Azure client) usate direttamente nelle orchestrazioni. Spostare le chiamate di I/O alle attività. |
No |
| DURABLE0006 | Avvertimento | Rileva l'utilizzo dell'API System.Environment , ad esempio , GetEnvironmentVariablenelle orchestrazioni. |
No |
| DURABLE0009 | Informazioni | Suggerisce l'uso di un parametro di input anziché di context.GetInput<T>(). |
No |
| DURABLE0010 | Avvertimento | Rileva l'utilizzo non contestuale ILogger nelle orchestrazioni. Utilizzare invece context.CreateReplaySafeLogger(). |
No |
| DURABLE0011 | Avvertimento | Rileva cicli di orchestrazione non associati while (true) che non chiamano ContinueAsNew. Senza ContinueAsNew, la cronologia dell'orchestrazione cresce per un periodo illimitato. |
No |
Annotazioni
Le regole DURABLE0007, le DURABLE0008 e le DURABLE1001-DURABLE1003 si applicano solo a Funzioni di Azure e non sono incluse nell'analizzatore autonomo di Durable Task SDK.
Regole di associazione
Queste regole convalidano che i binding di trigger e client vengano applicati ai tipi di parametro corretti.
| ID Regola | Severity | Descrizione | Correzione del codice |
|---|---|---|---|
| DURABLE1001 | Error | Assicura che [OrchestrationTrigger] venga applicato solo ai parametri TaskOrchestrationContext. |
Yes |
| DURABLE1002 | Error | Assicura che [DurableClient] venga applicato solo ai parametri DurableTaskClient. |
Yes |
| DURABLE1003 | Error | Assicura che [EntityTrigger] venga applicato solo ai parametri TaskEntityDispatcher. |
Yes |
Regole di attività
Queste regole controllano la mancata corrispondenza dei tipi e i nomi non risolti nelle chiamate di attività e orchestrazione secondaria.
| ID Regola | Severity | Descrizione | Correzione del codice |
|---|---|---|---|
| DURABLE2001 | Avvertimento | Rileva mancate corrispondenze del tipo di input tra le chiamate di attività e le definizioni di attività. | No |
| DURABLE2002 | Avvertimento | Rileva le mancate corrispondenze del tipo di output tra le chiamate di attività e le definizioni di attività. | No |
| DURABLE2003 | Informazioni | Segnala quando una chiamata di attività fa riferimento a un nome che non corrisponde ad alcuna attività definita nella compilazione. | No |
| DURABLE2004 | Informazioni | Segnala quando una chiamata di orchestrazione secondaria fa riferimento a un nome che non corrisponde ad alcun agente di orchestrazione definito nella compilazione. | No |
Per altre informazioni, vedere le note sulla versione di analyzer su GitHub.
Eliminare gli avvisi dell'analizzatore Roslyn
È possibile eliminare la diagnostica dell'analizzatore a livello di progetto, file o riga.
Sopprimi con .editorconfig
Aggiungere una voce al file .editorconfig per modificare il livello di gravità di una regola o disabilitarla completamente:
[*.cs]
dotnet_diagnostic.DURABLE0001.severity = none
I valori di gravità validi sono error, warning, suggestion, silente none.
Eliminare l'inline con #pragma
Usare #pragma warning disable per eliminare un avviso specifico in una sezione di codice:
#pragma warning disable DURABLE0001
var now = DateTime.UtcNow;
#pragma warning restore DURABLE0001
Eliminare a livello di progetto
Aggiungere una voce <NoWarn> al file .csproj per eliminare una regola per l'intero progetto:
<PropertyGroup>
<NoWarn>$(NoWarn);DURABLE0001</NoWarn>
</PropertyGroup>
Analizzatore .NET legacy in-process
Esiste un analizzatore Roslyn separato e precedente per il modello di programmazione .NET in-process. Questo analizzatore fa parte del pacchetto Microsoft.Azure.WebJobs.Extensions.DurableTask e usa un prefisso di regola diverso (DF anziché DURABLE). I due analizzatori sono pacchetti completamente separati e non condividono ID regola.
Importante
Il .NET modello di programmazione in-process viene ritirato. Usare il modello del processo di lavoro .NET isolato per nuovi progetti. L'analizzatore in-process legacy non riceve nuove regole o miglioramenti.
Per informazioni sulle regole dell'analizzatore in-process (DF0101-DF0307), vedere la pagina della versione Analyzer v0.2.0.