Durable Task Roslyn 分析器是一种实时代码分析器,可帮助你在 C# Durable Functions 应用中遵循 orchestrator 代码约束。 它会在代码到达生产之前检测不确定性的 API 使用情况、不正确的绑定和类型不匹配等常见问题。
分析器与 Microsoft.Azure.Functions.Worker.Extensions.DurableTask NuGet 包(v1.6.0 及更高版本)捆绑在一起,默认启用。 无需额外的设置。
Durable Task Roslyn 分析器是一种实时代码分析器,可帮助你遵循 C# Durable Task SDK 应用中的 业务流程协调程序代码约束 。 在代码到达生产之前,它会在生成时检测非确定性 API 使用情况和类型不匹配等常见问题。
若要使用分析器,请将 Microsoft.DurableTask.Analyzers NuGet 包添加到项目:
dotnet add package Microsoft.DurableTask.Analyzers
工作原理
分析器会在 Visual Studio 中、在安装了 C# 开发工具包扩展的 Visual Studio Code 中,以及在命令行上执行 dotnet build 时自动运行。 它会检查你的编排器代码,并在 IDE 的错误列表和生成输出中,将诊断报告为警告或错误。
不需要特殊的 IDE 配置。 分析器在项目中存在 NuGet 包后立即激活。
小窍门
默认情况下,Visual Studio仅在打开的文件上运行分析器。 若要在整个解决方案中运行分析器,请转到 “工具>选项>文本编辑器>C#>高级 ”,并将 后台分析范围 设置为 “整个解决方案”。
分析器规则
下表列出了随 Durable Task Roslyn 分析器一起提供的分析器规则。 每个规则都针对特定的代码约束冲突或常见错误。
| 规则编号 | Severity | 说明 |
|---|---|---|
| DURABLE0001 | 警告 | 检测编排中的非确定性DateTime属性(DateTime.Now、DateTime.UtcNow、DateTime.Today、DateTimeOffset.Now、DateTimeOffset.UtcNow)。 请改用 context.CurrentUtcDateTime。 |
| DURABLE0002 | 警告 | 在 Guid.NewGuid() 编排中检测。 请改用 context.NewGuid()。 |
| DURABLE0003 | 警告 | 检测 Task.Delay 或 Thread.Sleep 在编排流程中。 请改用 context.CreateTimer。 |
| DURABLE0004 | 警告 | 检测业务流程中的非确定性线程和任务 API(Thread.Start、Task.Run、Task.ContinueWith、TaskFactory.StartNew)。 |
| DURABLE0005 | 警告 | 检测直接在编排中使用的 I/O API(例如,HttpClient、Azure Storage 客户端)。 将 I/O 调用移动到活动。 |
| DURABLE0006 | 警告 | 检测业务流程中的 System.Environment API 使用(例如 GetEnvironmentVariable)。 |
| DURABLE0007 | 警告 | 检测 CancellationToken 编排函数签名中的参数。 |
| DURABLE0008 | 警告 | 在编排函数参数中检测非[OrchestrationTrigger] 绑定(例如 [EntityTrigger],[DurableClient])。 |
| DURABLE0009 | 信息 | 建议使用输入参数而不是 context.GetInput<T>()。 |
| DURABLE0010 | 警告 | 检测编排中的非上下文 ILogger 使用情况。 请改用 context.CreateReplaySafeLogger()。 |
| DURABLE1001 | Error | 保证[OrchestrationTrigger]仅应用于TaskOrchestrationContext参数。 |
| DURABLE1002 | Error | 保证[DurableClient]仅应用于DurableTaskClient参数。 |
| DURABLE1003 | Error | 保证[EntityTrigger]仅应用于TaskEntityDispatcher参数。 |
| DURABLE2001 | 警告 | 检测活动调用和活动定义之间的输入类型不匹配。 |
| DURABLE2002 | 警告 | 检测活动调用和活动定义之间的输出类型不匹配。 |
| DURABLE2003 | 信息 | 当检测到活动调用引用的名称与编译中定义的任何活动不匹配时,进行报告。 |
| DURABLE2004 | 信息 | 当子业务流程调用引用与编译中任何定义的业务流程协调程序不匹配的名称时报告。 |
| 规则编号 | Severity | 说明 |
|---|---|---|
| DURABLE0001 | 警告 | 检测编排中的非确定性DateTime属性(DateTime.Now、DateTime.UtcNow、DateTime.Today、DateTimeOffset.Now、DateTimeOffset.UtcNow)。 请改用 context.CurrentUtcDateTime。 |
| DURABLE0002 | 警告 | 在 Guid.NewGuid() 编排中检测。 请改用 context.NewGuid()。 |
| DURABLE0003 | 警告 | 检测 Task.Delay 或 Thread.Sleep 在编排流程中。 请改用 context.CreateTimer。 |
| DURABLE0004 | 警告 | 检测业务流程中的非确定性线程和任务 API(Thread.Start、Task.Run、Task.ContinueWith、TaskFactory.StartNew)。 |
| DURABLE0005 | 警告 | 检测直接在编排中使用的 I/O API(例如,HttpClient、Azure Storage 客户端)。 将 I/O 调用移动到活动。 |
| DURABLE0006 | 警告 | 检测业务流程中的 System.Environment API 使用(例如 GetEnvironmentVariable)。 |
| DURABLE0009 | 信息 | 建议使用输入参数而不是 context.GetInput<T>()。 |
| DURABLE0010 | 警告 | 检测编排中的非上下文 ILogger 使用情况。 请改用 context.CreateReplaySafeLogger()。 |
| DURABLE2001 | 警告 | 检测活动调用和活动定义之间的输入类型不匹配。 |
| DURABLE2002 | 警告 | 检测活动调用和活动定义之间的输出类型不匹配。 |
| DURABLE2003 | 信息 | 当检测到活动调用引用的名称与编译中定义的任何活动不匹配时,进行报告。 |
| DURABLE2004 | 信息 | 当子业务流程调用引用与编译中任何定义的业务流程协调程序不匹配的名称时报告。 |
注释
规则DURABLE0007、DURABLE0008和 DURABLE1001-DURABLE1003 仅适用于Azure Functions,并且不包括在独立的 Durable Task SDK 分析器中。
有关详细信息,请参阅 GitHub 上的 analyzer 发行说明。
禁止显示分析器警告
可以在项目、文件或行级别取消分析器诊断。
禁止显示 .editorconfig
将条目添加到 .editorconfig 文件以更改规则的严重性或完全禁用它:
[*.cs]
dotnet_diagnostic.DURABLE0001.severity = none
有效的严重性值为error、、warningsuggestion、silent和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 包的一部分,具有一组不同的规则。
重要
正在停用.NET进程内编程模型。 对新项目使用 .NET 隔离工作程序模型。 旧进程内分析器不会收到新规则或改进。
有关进程内分析器规则的信息,请参阅 Analyzer v0.2.0 发布页。