Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Durable Task Roslyn Analyzer é um analisador de código ao vivo que o ajuda a seguir as restrições do código orchestrator nas suas aplicações de Durable Functions C#. Deteta problemas comuns como uso não determinístico da API, bindings incorretos e incompatibilidades de tipos durante a compilação, antes do seu código chegar à produção.
O analisador está incluído no pacote NuGet Microsoft.Azure.Functions.Worker.Extensions.DurableTask (v1.6.0 e posteriores) e está ativado por padrão. Não é necessária qualquer configuração extra.
O Durable Task Roslyn Analyzer é um analisador de código ao vivo que o ajuda a seguir as restrições do código do orquestrador nas suas aplicações SDK de Tarefas Duráveis em C#. Deteta problemas comuns como uso não determinístico da API e incompatibilidades de tipos durante a compilação, antes do seu código chegar à produção.
Para usar o analisador, adicione o Microsoft.DurableTask.Analyzers pacote NuGet ao seu projeto:
dotnet add package Microsoft.DurableTask.Analyzers
Como funciona
O analisador corre automaticamente em Visual Studio, Visual Studio Code (com a extensão C# Dev Kit) e durante dotnet build na linha de comandos. Inspeciona o código do teu orquestrador e reporta diagnósticos como avisos ou erros na lista de erros do teu IDE e na saída da compilação.
Não é necessária qualquer configuração do IDE para analisar ficheiros abertos. O analisador ativa assim que o pacote NuGet está presente no seu projeto.
Sugestão
Por defeito, o Visual Studio só executa analisadores nos ficheiros que tem abertos. Para analisar toda a sua solução de uma só vez, vá a Ferramentas>Opções>Editor de Texto>C#>Advanced e defina o âmbito de análise em segundo plano para Solução completa.
Para várias regras, o analisador também fornece correções automáticas de código (ações rápidas) em Visual Studio e VS Code. Por exemplo, pode ser substituído DateTime.Now por context.CurrentUtcDateTime com um único clique.
Regras do analisador
As secções seguintes listam as regras do analisador que acompanham o Analisador Roslyn de Tarefas Duradouras, agrupadas por categoria.
Regras de orquestração
Estas regras impõem restrições ao código do orquestrador ao detetar o uso de APIs não determinístico ou inseguro dentro dos métodos de orquestração.
| ID da regra | Severity | Descrição | Correção de código |
|---|---|---|---|
| DURABLE0001 | Advertência | Deteta propriedades não determinísticas DateTime (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) em orquestrações. Utilize context.CurrentUtcDateTime em substituição. |
Yes |
| DURABLE0002 | Advertência | Deteta Guid.NewGuid() em orquestrações. Utilize context.NewGuid() em substituição. |
Yes |
| DURABLE0003 | Advertência | Deteta Task.Delay ou Thread.Sleep em orquestrações. Utilize context.CreateTimer em substituição. |
Yes |
| DURABLE0004 | Advertência | Deteta APIs de threads e tarefas não determinísticas (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) em orquestrações. |
No |
| DURABLE0005 | Advertência | Deteta APIs de I/O (por exemplo, HttpClient, clientes de Armazenamento do Azure) utilizadas diretamente nas orquestrações. Transferir chamadas de I/O para atividades. |
No |
| DURABLE0006 | Advertência | Deteta a utilização de System.Environment API (por exemplo, GetEnvironmentVariable) em orquestrações. |
No |
| DURABLE0007 | Advertência | Deteta CancellationToken parâmetros em assinaturas de funções de orquestração. |
No |
| DURABLE0008 | Advertência | Deteta ligações não-[OrchestrationTrigger] (por exemplo, [EntityTrigger], [DurableClient]) em parâmetros da função de orquestração. |
No |
| DURABLE0009 | Informações | Sugere usar um parâmetro de entrada em vez de context.GetInput<T>(). |
No |
| DURABLE0010 | Advertência | Deteta o uso não contextual ILogger em orquestrações. Utilize context.CreateReplaySafeLogger() em substituição. |
No |
| DURABLE0011 | Advertência | Deteta loops de orquestração ilimitados while (true) que não chamam ContinueAsNew. Sem ContinueAsNew, a história da orquestração cresce indefinidamente. |
No |
| ID da regra | Severity | Descrição | Correção de código |
|---|---|---|---|
| DURABLE0001 | Advertência | Deteta propriedades não determinísticas DateTime (DateTime.Now, DateTime.UtcNow, DateTime.Today, DateTimeOffset.Now, DateTimeOffset.UtcNow) em orquestrações. Utilize context.CurrentUtcDateTime em substituição. |
Yes |
| DURABLE0002 | Advertência | Deteta Guid.NewGuid() em orquestrações. Utilize context.NewGuid() em substituição. |
Yes |
| DURABLE0003 | Advertência | Deteta Task.Delay ou Thread.Sleep em orquestrações. Utilize context.CreateTimer em substituição. |
Yes |
| DURABLE0004 | Advertência | Deteta APIs de threads e tarefas não determinísticas (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) em orquestrações. |
No |
| DURABLE0005 | Advertência | Deteta APIs de I/O (por exemplo, HttpClient, clientes de Armazenamento do Azure) utilizadas diretamente nas orquestrações. Transferir chamadas de I/O para atividades. |
No |
| DURABLE0006 | Advertência | Deteta a utilização de System.Environment API (por exemplo, GetEnvironmentVariable) em orquestrações. |
No |
| DURABLE0009 | Informações | Sugere usar um parâmetro de entrada em vez de context.GetInput<T>(). |
No |
| DURABLE0010 | Advertência | Deteta o uso não contextual ILogger em orquestrações. Utilize context.CreateReplaySafeLogger() em substituição. |
No |
| DURABLE0011 | Advertência | Deteta loops de orquestração ilimitados while (true) que não chamam ContinueAsNew. Sem ContinueAsNew, a história da orquestração cresce indefinidamente. |
No |
Observação
As regras DURABLE0007, DURABLE0008 e DURABLE1001-DURABLE1003 aplicam-se apenas a Funções do Azure e não estão incluídas no analisador independente do Durable Task SDK.
Regras vinculativas
Estas regras validam que as associações de gatilho e cliente são aplicadas aos tipos de parâmetros corretos.
| ID da regra | Severity | Descrição | Correção de código |
|---|---|---|---|
| DURABLE1001 | Erro | Assegura que [OrchestrationTrigger] é aplicado apenas a parâmetros TaskOrchestrationContext. |
Yes |
| DURABLE1002 | Erro | Assegura que [DurableClient] é aplicado apenas a parâmetros DurableTaskClient. |
Yes |
| DURABLE1003 | Erro | Assegura que [EntityTrigger] é aplicado apenas a parâmetros TaskEntityDispatcher. |
Yes |
Regras da atividade
Estas regras verificam incompatibilidades de tipo e nomes não resolvidos em chamadas de atividade e suborquestração.
| ID da regra | Severity | Descrição | Correção de código |
|---|---|---|---|
| DURABLE2001 | Advertência | Detetar incompatibilidades no tipo de entrada entre invocações de atividade e definições de atividade. | No |
| DURABLE2002 | Advertência | Deteta incompatibilidades de tipos de saída entre invocações de atividade e definições de atividade. | No |
| DURABLE2003 | Informações | Reporta quando uma chamada de atividade faz referência a um nome que não corresponde a nenhuma atividade definida na compilação. | No |
| DURABLE2004 | Informações | Relata quando uma chamada de sub-orquestração referencia um nome que não corresponde a nenhum orquestrador definido na compilação. | No |
Para mais informações, consulte as notas de lançamento analyzer no GitHub.
Suprimir avisos do Roslyn Analyzer
Pode suprimir diagnósticos do analisador ao nível do projeto, ficheiro ou linha.
Suprimir com .editorconfig
Adicione uma entrada ao seu .editorconfig ficheiro para alterar a gravidade de uma regra ou desative-a completamente:
[*.cs]
dotnet_diagnostic.DURABLE0001.severity = none
Os valores válidos de severidade são error, warning, suggestion, silent, e none.
Suprimir em linha com #pragma
Use #pragma warning disable para suprimir um aviso específico numa secção do código:
#pragma warning disable DURABLE0001
var now = DateTime.UtcNow;
#pragma warning restore DURABLE0001
Suprimir ao nível do projeto
Adicione uma <NoWarn> entrada ao seu .csproj ficheiro para suprimir uma regra para todo o projeto:
<PropertyGroup>
<NoWarn>$(NoWarn);DURABLE0001</NoWarn>
</PropertyGroup>
Analisador .NET em processo antigo
Existe um analisador Roslyn separado e mais antigo para o modelo de programação .NET em processo. Este analisador faz parte do pacote Microsoft.Azure.WebJobs.Extensions.DurableTask e utiliza um prefixo de regra diferente (DF em vez de DURABLE). Os dois analisadores são pacotes totalmente separados e não partilham IDs de regras.
Importante
O modelo de programação em processo .NET está a ser retirado. Use o modelo .NET trabalhador isolado para novos projetos. O analisador legado em execução não recebe novas regras nem melhorias.
Para informações sobre as regras do analisador em processo (DF0101–DF0307), consulte a página de lançamento do Analyzer v0.2.0.