Durable Task Roslyn Analyzer pro orchestrace jazyka C#

Durable Task Roslyn Analyzer je živý analyzátor kódu, který vám pomůže sledovat omezení kódu orchestrátoru v aplikacích Durable Functions jazyka C#. Detekuje běžné problémy, jako je nedeterministické použití rozhraní API, nesprávné vazby a neshody typů v době sestavení, než váš kód dosáhne produkčního prostředí.

Analyzátor je součástí balíčku Microsoft.Azure.Functions.Worker.Extensions.DurableTask NuGet (v1.6.0 a novější) a je ve výchozím nastavení povolený. Nevyžaduje se žádné další nastavení.

Durable Task Roslyn Analyzer je analyzátor živého kódu, který vám pomůže sledovat omezení kódu orchestrátoru v aplikacích C# Durable Task SDK. Zjistí běžné problémy, jako je nedeterministické použití rozhraní API a neshody typů v době sestavení, než váš kód dosáhne produkčního prostředí.

Pokud chcete použít analyzátor, přidejte do Microsoft.DurableTask.Analyzers projektu balíček NuGet:

dotnet add package Microsoft.DurableTask.Analyzers

Jak to funguje

Analyzátor běží automaticky v Visual Studio, Visual Studio Code (s rozšířením C# Dev Kit) a během dotnet build na příkazovém řádku. Kontroluje kód orchestrátoru a hlásí diagnostiku jako upozornění nebo chyby v seznamu chyb integrovaného vývojového prostředí a ve výstupu sestavení.

K analýze otevřených souborů není nutná žádná konfigurace integrovaného vývojového prostředí (IDE). Analyzátor se aktivuje, jakmile se balíček NuGet nachází ve vašem projektu.

Tip

Ve výchozím nastavení Visual Studio spouští analyzátory jenom u souborů, které máte otevřené. Pokud chcete analyzovat celé řešení najednou, přejděte doEditoru>možností>nástroje>C#>Upřesnit a nastavte obor analýzy pozadí na Celé řešení.

Analyzátor také poskytuje opravyautomatického kódu (rychlé akce) v Visual Studio a VS Code. Může se například nahradit DateTime.Nowcontext.CurrentUtcDateTime jedním kliknutím.

Pravidla analyzátoru

Následující části obsahují seznam pravidel analyzátoru, která jsou dodávána pomocí analyzátoru Durable Task Roslyn Analyzer seskupené podle kategorie.

Pravidla orchestrace

Tato pravidla vynucují omezení kódu orchestrátoru detekcí nedeterministického nebo nebezpečného použití rozhraní API uvnitř metod orchestrace.

ID pravidla Závažnost Description Oprava kódu
DURABLE0001 Warning Rozpozná nedeterministické DateTime vlastnosti (DateTime.Now, DateTime.UtcNow, DateTime.TodayDateTimeOffset.Now, , DateTimeOffset.UtcNow) v orchestracích. Místo toho použijte context.CurrentUtcDateTime. Ano
DURABLE0002 Warning Detekuje Guid.NewGuid() v orchestracích. Místo toho použijte context.NewGuid(). Ano
DURABLE0003 Warning Detekuje Task.Delay nebo Thread.Sleep v orchestracích. Místo toho použijte context.CreateTimer. Ano
DURABLE0004 Warning Detekuje nedeterministické API vláken a úloh (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) v orchestracích. Ne
DURABLE0005 Warning Detekuje rozhraní API vstupně-výstupních operací (například HttpClient, klienti Azure Storage) použitá přímo v orchestracích. Přesuňte vstupně-výstupní volání do aktivit Ne
DURABLE0006 Warning System.Environment Detekuje využití rozhraní API (napříkladGetEnvironmentVariable) v orchestracích. Ne
DURABLE0007 Warning Rozpozná parametry v podpisech funkcí orchestrace. Ne
DURABLE0008 Warning Detekuje ne-vazby[OrchestrationTrigger] (například [EntityTrigger], [DurableClient]) v parametrech orchestrační funkce. Ne
DURABLE0009 Informace Navrhuje použití vstupního parametru context.GetInput<T>()místo . Ne
DURABLE0010 Warning Detekuje nekontextové ILogger použití v orchestracích. Místo toho použijte context.CreateReplaySafeLogger(). Ne
DURABLE0011 Warning Detekuje nevázané while (true) smyčky orchestrace, které nevolají ContinueAsNew. Bez ContinueAsNew, historie orchestrace roste neomezeně dlouho. Ne
ID pravidla Závažnost Description Oprava kódu
DURABLE0001 Warning Rozpozná nedeterministické DateTime vlastnosti (DateTime.Now, DateTime.UtcNow, DateTime.TodayDateTimeOffset.Now, , DateTimeOffset.UtcNow) v orchestracích. Místo toho použijte context.CurrentUtcDateTime. Ano
DURABLE0002 Warning Detekuje Guid.NewGuid() v orchestracích. Místo toho použijte context.NewGuid(). Ano
DURABLE0003 Warning Detekuje Task.Delay nebo Thread.Sleep v orchestracích. Místo toho použijte context.CreateTimer. Ano
DURABLE0004 Warning Detekuje nedeterministické API vláken a úloh (Thread.Start, Task.Run, Task.ContinueWith, TaskFactory.StartNew) v orchestracích. Ne
DURABLE0005 Warning Detekuje rozhraní API vstupně-výstupních operací (například HttpClient, klienti Azure Storage) použitá přímo v orchestracích. Přesuňte vstupně-výstupní volání do aktivit Ne
DURABLE0006 Warning System.Environment Detekuje využití rozhraní API (napříkladGetEnvironmentVariable) v orchestracích. Ne
DURABLE0009 Informace Navrhuje použití vstupního parametru context.GetInput<T>()místo . Ne
DURABLE0010 Warning Detekuje nekontextové ILogger použití v orchestracích. Místo toho použijte context.CreateReplaySafeLogger(). Ne
DURABLE0011 Warning Detekuje nevázané while (true) smyčky orchestrace, které nevolají ContinueAsNew. Bez ContinueAsNew, historie orchestrace roste neomezeně dlouho. Ne

Note

Pravidla DURABLE0007, DURABLE0008 a DURABLE1001-DURABLE1003 se vztahují pouze na Azure Functions a nejsou součástí samostatného analyzátoru sady Durable Task SDK.

Pravidla vazeb

Tato pravidla ověřují, že aktivační události a vazby klientů se použijí na správné typy parametrů.

ID pravidla Závažnost Description Oprava kódu
DURABLE1001 Error Zajišťuje, že [OrchestrationTrigger] je aplikováno pouze na parametry TaskOrchestrationContext. Ano
DURABLE1002 Error Zajišťuje, že [DurableClient] je aplikováno pouze na parametry DurableTaskClient. Ano
DURABLE1003 Error Zajišťuje, že [EntityTrigger] je aplikováno pouze na parametry TaskEntityDispatcher. Ano

Pravidla aktivit

Tato pravidla kontrolují neshody typů a nevyřešené názvy ve voláních aktivit a dílčí orchestrace.

ID pravidla Závažnost Description Oprava kódu
DURABLE2001 Warning Detekuje neshody vstupního typu mezi vyvoláním aktivit a definicemi aktivit. Ne
DURABLE2002 Warning Detekuje neshody typu výstupu mezi vyvoláním aktivit a definicemi aktivit. Ne
DURABLE2003 Informace Zaznamenává, když volání aktivity odkazuje na název, který neodpovídá žádné definované aktivitě v kompilaci. Ne
DURABLE2004 Informace Hlásí, když podorchestrační volání odkazuje na název, který neodpovídá žádnému definovanému orchestrátorem v kompilaci. Ne

Další informace najdete v poznámkách k verzi analyzátoru na GitHubu.

Potlačení upozornění analyzátoru Roslyn

Diagnostiku analyzátoru můžete potlačit na úrovni projektu, souboru nebo řádku.

Potlačit pomocí .editorconfig

Přidejte do .editorconfig souboru položku, abyste změnili závažnost pravidla nebo ji úplně zakázali:

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

Platné hodnoty závažnosti jsou error, warning, suggestion, silent, a none.

Potlačte vložený text pomocí #pragma

Slouží #pragma warning disable k potlačení konkrétního upozornění v části kódu:

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

Potlačení na úrovni projektu

<NoWarn> Přidejte do .csproj souboru položku, která potlačí pravidlo pro celý projekt:

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

Analyzátor starší verze .NET pro práci v procesu

Pro programovací model .NET v procesu existuje samostatný starší analyzátor Roslyn. Tento analyzátor je součástí balíčku Microsoft.Azure.WebJobs.Extensions.DurableTask a používá jinou předponu pravidla (DF místo DURABLE). Dva analyzátory jsou zcela oddělené balíčky a nesdílejí ID pravidel.

Starší verze in-process analyzátoru nepřijímá nová pravidla ani vylepšení.

Informace o pravidlech analyzátoru v procesu (DF0101–DF0307) najdete na stránce verze Analyzer v0.2.0.

Další krok