次の方法で共有


Durable Task Roslyn Analyzer (C# のみ)

Durable Task Roslyn Analyzer は、C# Durable Functions アプリの orchestrator コード制約に従うのに役立つライブ コード アナライザーです。 コードが運用環境に到達する前に、非決定論的 API の使用、不適切なバインディング、ビルド時の型の不一致などの一般的な問題が検出されます。

アナライザーは、Microsoft.Azure.Functions.Worker.Extensions.DurableTask NuGet パッケージ (v1.6.0 以降) にバンドルされており、既定で有効になっています。 追加のセットアップは必要ありません。

Durable Task Roslyn Analyzer は、C# Durable Task SDK アプリで オーケストレーター コードの制約 に従うのに役立つライブ コード アナライザーです。 コードが運用環境に到達する前に、ビルド時の非決定論的 API の使用や型の不一致などの一般的な問題を検出します。

アナライザーを使用するには、 Microsoft.DurableTask.Analyzers NuGet パッケージをプロジェクトに追加します。

dotnet add package Microsoft.DurableTask.Analyzers

どのように機能するのか

アナライザーは、Visual Studio、Visual Studio Code (C# Dev Kit 拡張機能を使用)、およびコマンド ラインの dotnet build 中に自動的に実行されます。 オーケストレーター コードが検査され、IDE のエラー一覧とビルド出力に警告またはエラーとして診断が報告されます。

特別な IDE 構成は必要ありません。 NuGet パッケージがプロジェクトに存在するとすぐにアナライザーがアクティブになります。

ヒント

既定では、Visual Studioは開いているファイルでのみアナライザーを実行します。 ソリューション全体でアナライザーを実行するには、 Tools>Options>Text Editor>C#>Advanced に移動し、 バックグラウンド分析スコープ[ソリューション全体] に設定します。

アナライザー ルール

次の表に、Durable Task Roslyn Analyzer に付属するアナライザー ルールの一覧を示します。 各ルールは、特定のコード制約違反または一般的な間違いを対象とします。

ルール識別子 Severity 説明
DURABLE0001 Warnung オーケストレーション内の非決定的な DateTime プロパティ (DateTime.NowDateTime.UtcNowDateTime.TodayDateTimeOffset.NowDateTimeOffset.UtcNow) を検出します。 context.CurrentUtcDateTime を代わりに使用します。
DURABLE0002 Warnung オーケストレーション内の Guid.NewGuid() を検出します。 context.NewGuid() を代わりに使用します。
DURABLE0003 Warnung オーケストレーション内の Task.Delay または Thread.Sleep を検出します。 context.CreateTimer を代わりに使用します。
DURABLE0004 Warnung オーケストレーション内の非決定論的スレッド API とタスク API (Thread.StartTask.RunTask.ContinueWithTaskFactory.StartNew) を検出します。
DURABLE0005 Warnung オーケストレーションで直接使用される I/O API (HttpClient、Azure Storage クライアントなど) を検出します。 I/O 呼び出しをアクティビティに移動します。
DURABLE0006 Warnung オーケストレーション System.Environment API の使用状況 ( GetEnvironmentVariableなど) を検出します。
DURABLE0007 Warnung オーケストレーション関数シグネチャ CancellationToken パラメーターを検出します。
DURABLE0008 Warnung オーケストレーション関数パラメーター内の[OrchestrationTrigger] 以外のバインド ( [EntityTrigger][DurableClient]など) を検出します。
DURABLE0009 Info context.GetInput<T>()の代わりに入力パラメーターを使用するよう提案します。
DURABLE0010 Warnung オーケストレーションでのコンテキストに依存しない ILogger の使用状況を検出します。 context.CreateReplaySafeLogger() を代わりに使用します。
DURABLE1001 エラー [OrchestrationTrigger]TaskOrchestrationContextパラメーターにのみ適用されるようにします。
DURABLE1002 エラー [DurableClient]DurableTaskClientパラメーターにのみ適用されるようにします。
DURABLE1003 エラー [EntityTrigger]TaskEntityDispatcherパラメーターにのみ適用されるようにします。
DURABLE2001 Warnung アクティビティの呼び出しとアクティビティ定義の入力の種類の不一致を検出します。
DURABLE2002 Warnung アクティビティ呼び出しとアクティビティ定義の間の出力の種類の不一致を検出します。
DURABLE2003 Info アクティビティ呼び出しがコンパイルで定義されているアクティビティと一致しない名前を参照すると報告されます。
DURABLE2004 Info サブオーケストレーション呼び出しがコンパイルで定義されたオーケストレーターと一致しない名前を参照すると報告されます。
ルール識別子 Severity 説明
DURABLE0001 Warnung オーケストレーション内の非決定的な DateTime プロパティ (DateTime.NowDateTime.UtcNowDateTime.TodayDateTimeOffset.NowDateTimeOffset.UtcNow) を検出します。 context.CurrentUtcDateTime を代わりに使用します。
DURABLE0002 Warnung オーケストレーション内の Guid.NewGuid() を検出します。 context.NewGuid() を代わりに使用します。
DURABLE0003 Warnung オーケストレーション内の Task.Delay または Thread.Sleep を検出します。 context.CreateTimer を代わりに使用します。
DURABLE0004 Warnung オーケストレーション内の非決定論的スレッド API とタスク API (Thread.StartTask.RunTask.ContinueWithTaskFactory.StartNew) を検出します。
DURABLE0005 Warnung オーケストレーションで直接使用される I/O API (HttpClient、Azure Storage クライアントなど) を検出します。 I/O 呼び出しをアクティビティに移動します。
DURABLE0006 Warnung オーケストレーション System.Environment API の使用状況 ( GetEnvironmentVariableなど) を検出します。
DURABLE0009 Info context.GetInput<T>()の代わりに入力パラメーターを使用するよう提案します。
DURABLE0010 Warnung オーケストレーションでのコンテキストに依存しない ILogger の使用状況を検出します。 context.CreateReplaySafeLogger() を代わりに使用します。
DURABLE2001 Warnung アクティビティの呼び出しとアクティビティ定義の入力の種類の不一致を検出します。
DURABLE2002 Warnung アクティビティ呼び出しとアクティビティ定義の間の出力の種類の不一致を検出します。
DURABLE2003 Info アクティビティ呼び出しがコンパイルで定義されているアクティビティと一致しない名前を参照すると報告されます。
DURABLE2004 Info サブオーケストレーション呼び出しがコンパイルで定義されたオーケストレーターと一致しない名前を参照すると報告されます。

ルールDURABLE0007、DURABLE0008、および DURABLE1001-DURABLE1003 はAzure Functionsにのみ適用され、スタンドアロンの Durable Task SDK アナライザーには含まれません。

詳細については、GitHubのanalyzer のリリース ノートを参照してください。

アナライザーの警告を抑制する

プロジェクト、ファイル、または行レベルでアナライザー診断を抑制できます。

.editorconfig を使用して抑制する

.editorconfig ファイルにエントリを追加して、ルールの重大度を変更するか、完全に無効にします。

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

有効な重大度の値は、 errorwarningsuggestionsilent、および noneです。

#pragma でインライン抑制

#pragma warning disableを使用して、コードのセクションで特定の警告を抑制します。

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

プロジェクト レベルで抑制する

<NoWarn>エントリを.csproj ファイルに追加して、プロジェクト全体のルールを抑制します。

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

レガシ .NETインプロセス アナライザー

.NETインプロセス プログラミング モデルには、古い Roslyn アナライザーが別に存在します。 このアナライザーは、Microsoft.Azure.WebJobs.Extensions.DurableTask パッケージの一部であり、規則のセットが異なります。

Important

.NETインプロセス プログラミング モデルは廃止されます。 新しいプロジェクトには、.NET分離ワーカー モデルを使用します。 従来のインプロセス アナライザーは、新しいルールや機能強化を受け取りません。

インプロセス アナライザールールの詳細については、Analyzer v0.2.0 リリース ページを参照してください。

次のステップ