Excalibur.Dispatch.Analyzers
3.0.0-alpha.187
See the version list below for details.
dotnet add package Excalibur.Dispatch.Analyzers --version 3.0.0-alpha.187
NuGet\Install-Package Excalibur.Dispatch.Analyzers -Version 3.0.0-alpha.187
<PackageReference Include="Excalibur.Dispatch.Analyzers" Version="3.0.0-alpha.187"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="Excalibur.Dispatch.Analyzers" Version="3.0.0-alpha.187" />
<PackageReference Include="Excalibur.Dispatch.Analyzers"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Excalibur.Dispatch.Analyzers --version 3.0.0-alpha.187
#r "nuget: Excalibur.Dispatch.Analyzers, 3.0.0-alpha.187"
#:package Excalibur.Dispatch.Analyzers@3.0.0-alpha.187
#addin nuget:?package=Excalibur.Dispatch.Analyzers&version=3.0.0-alpha.187&prerelease
#tool nuget:?package=Excalibur.Dispatch.Analyzers&version=3.0.0-alpha.187&prerelease
Excalibur.Dispatch.Analyzers
Roslyn analyzers that enforce Excalibur framework conventions, async best practices, and .NET design guidelines at compile time.
Installation
dotnet add package Excalibur.Dispatch.Analyzers
Diagnostic Rules
| Rule | Severity | Description |
|---|---|---|
| DISP101 | Warning | DI extension class should be in Microsoft.Extensions.DependencyInjection namespace |
| DISP102 | Warning | Extension class should not use interface-style 'I' prefix |
| DISP103 | Warning | CancellationToken should not have default value in interface methods |
| DISP104 | Warning | Namespace should not contain '.Core.' segment |
| DISP105 | Warning | Missing ConfigureAwait(false) in library code |
| DISP106 | Warning | Blocking call (.Result/.Wait()/.GetResult()) in async method |
DISP101: DI Extension Namespace
ServiceCollection extension methods must live in the Microsoft.Extensions.DependencyInjection namespace for IntelliSense discoverability. This follows Microsoft's convention for all first-party packages.
DISP102: Extension Class Naming
Static extension classes must not use an interface-style 'I' prefix (e.g., IDispatcherExtensions). The 'I' prefix is reserved for interfaces per .NET Framework Design Guidelines.
DISP103: CancellationToken in Interfaces
Framework interface methods must require CancellationToken parameters without default values. Optional CancellationToken hides cancellation support and creates non-cancellable call chains.
DISP104: Core Namespace Segment
Namespaces in the Excalibur framework must not contain a .Core. segment (e.g., Dispatch.Core.Messaging). Use a direct namespace path instead.
DISP105: ConfigureAwait in Library Code
All await expressions in framework/library code must use ConfigureAwait(false). Without it, continuations may be scheduled on the caller's synchronization context, causing deadlocks.
DISP106: Blocking Calls in Async Methods
Async methods must not use .Result, .Wait(), or .GetAwaiter().GetResult(). These blocking patterns cause thread pool starvation in high-throughput dispatch pipelines. Use await instead.
Related Packages
- Excalibur.Dispatch.SourceGenerators.Analyzers - Handler discovery, AOT compatibility, and message type validation (DISP001-DISP006)
License
This project is multi-licensed under:
See LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.0-alpha.198 | 37 | 5/28/2026 |
| 3.0.0-alpha.197 | 50 | 5/28/2026 |
| 3.0.0-alpha.194 | 45 | 5/20/2026 |
| 3.0.0-alpha.193 | 61 | 5/13/2026 |
| 3.0.0-alpha.192 | 49 | 5/13/2026 |
| 3.0.0-alpha.191 | 49 | 5/13/2026 |
| 3.0.0-alpha.189 | 47 | 5/12/2026 |
| 3.0.0-alpha.187 | 50 | 5/8/2026 |
| 3.0.0-alpha.185 | 47 | 5/7/2026 |
| 3.0.0-alpha.183 | 53 | 5/7/2026 |
| 3.0.0-alpha.182 | 49 | 5/6/2026 |
| 3.0.0-alpha.181 | 42 | 5/6/2026 |
| 3.0.0-alpha.179 | 51 | 5/6/2026 |
| 3.0.0-alpha.178 | 57 | 4/25/2026 |
| 3.0.0-alpha.177 | 58 | 4/25/2026 |
| 3.0.0-alpha.176 | 56 | 4/25/2026 |
| 3.0.0-alpha.175 | 56 | 4/24/2026 |
| 3.0.0-alpha.174 | 55 | 4/24/2026 |
| 3.0.0-alpha.173 | 47 | 4/24/2026 |
| 3.0.0-alpha.170 | 48 | 4/23/2026 |