Claude
Skill
dotnet
Primary router skill for broad .NET work. Classify the repo by app model and cross-cutting concern first, then switch to the narrowest matching .NET skill instead of staying at a generic layer.
Virus-scanned
Reviewed automatically before listing.
Download
postpartum-genushyacinthus29-dotnet-skills-skills_dotnet-bfa4ebd.zip · 7 KB
Install
skills CLI
npx skills add https://github.com/Postpartum-genushyacinthus29/dotnet-skills/tree/main/skills/dotnet
Claude Code
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install postpartum-genushyacinthus29-dotnet-skills@llmmart
Git
git clone https://github.com/Postpartum-genushyacinthus29/dotnet-skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole postpartum-genushyacinthus29/dotnet-skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
.NET Router Skill
Trigger On
- the user asks for general
.NEThelp without naming a narrower framework or tool - implementing, debugging, reviewing, or refactoring C# or
.NETcode in a repo with multiple app models or frameworks - deciding which
.NETskill should own a task before editing code - tasks that combine platform work with testing, quality, architecture, setup, or migration decisions
Workflow
- Detect the real stack first:
- target frameworks and SDK version
LangVersion- project SDKs and workload hints
- hosting model and app entry points
- test framework and runner
- analyzers, formatters, coverage, and CI quality gates
- Route to the narrowest platform skill as soon as the stack is known:
- Web:
dotnet-aspnet-core,dotnet-minimal-apis,dotnet-web-api,dotnet-blazor,dotnet-signalr,dotnet-grpc - Cloud and hosting:
dotnet-aspire,dotnet-azure-functions,dotnet-worker-services - Desktop and client:
dotnet-maui,dotnet-wpf,dotnet-winforms,dotnet-winui - Data and distributed:
dotnet-entity-framework-core,dotnet-entity-framework6,dotnet-orleans - AI and agentic:
dotnet-semantic-kernel,dotnet-microsoft-extensions-ai,dotnet-microsoft-agent-framework,dotnet-mlnet,dotnet-mixed-reality - Legacy:
dotnet-legacy-aspnet,dotnet-wcf,dotnet-workflow-foundation
- Web:
- Route cross-cutting work to the companion skill instead of keeping it inside generic
.NETadvice:- project bootstrap or repo shape:
dotnet-project-setup,dotnet-architecture - frontend asset analysis in mixed
.NETplus Node repos:dotnet-eslint,dotnet-stylelint,dotnet-htmlhint,dotnet-webhint,dotnet-biome,dotnet-sonarjs,dotnet-metalint,dotnet-chous - code review:
dotnet-code-review - language features:
dotnet-modern-csharp - testing:
dotnet-tunit,dotnet-xunit,dotnet-mstest - format, analyzers, coverage, and CI:
dotnet-format,dotnet-code-analysis,dotnet-quality-ci,dotnet-coverlet,dotnet-reportgenerator - maintainability and architecture rules:
dotnet-complexity,dotnet-netarchtest,dotnet-archunitnet
- project bootstrap or repo shape:
- If more than one specialized skill applies, prefer the one closest to the user-visible behavior first, then pull in the quality or tooling skill second.
- Do not stop at this skill once a narrower match exists. This skill should classify and hand off, not become a generic dumping ground.
- After code changes, validate with the repository's actual build, test, and quality workflow instead of generic
.NETcommands.
Routing Heuristics
- If the repo contains
Microsoft.NET.Sdk.Web, start from a web skill, not generic.NET. - If the repo contains Blazor, Razor Components, or
.razorpages, preferdotnet-blazor. - If the repo contains
package.json, frontend lint configs, or browser-facing asset pipelines inside the.NETsolution, prefer the dedicated frontend analysis skills instead of generic.NET. - If the repo contains Orleans grains or silo hosting, prefer
dotnet-orleans. - If the repo is mostly analyzers, CI, or coverage work, prefer the quality skill directly.
- If the user asks about “which skill should I use?”, answer with the narrowest matching skill and explain why in one short sentence.
- If no narrower skill matches, keep the work here and stay explicit about the missing specialization.
Deliver
- the correct specialized skill choice for the task
- repo-compatible code or documentation changes that stay aligned with the detected stack
- validation evidence that matches the real project runner and quality toolchain
Validate
- the chosen downstream skill actually exists in the catalog
- platform assumptions match project SDKs, packages, and workloads
- generic guidance has been replaced by framework-specific guidance whenever possible
- runner-specific commands are not mixed incorrectly
- language or runtime features are only used when the repo supports them
Documentation
References
references/routing.md- Decision tree for routing tasks to specialized .NET skills, including app model classification and cross-cutting concern handling.references/detection.md- Project detection patterns for identifying SDK types, target frameworks, workloads, language versions, and app models.
Files (dotnet-skills)
-
references
-
detection.md 7 KB
# Project Detection Patterns This reference defines detection patterns for identifying .NET project characteristics including SDK types, target frameworks, workloads, and app models. ## SDK Detection ### Project SDK Types Detect the SDK from the `<Project Sdk="...">` attribute in `.csproj`/`.fsproj`/`.vbproj` files: | SDK | Indicates | |-----|-----------| | `Microsoft.NET.Sdk` | Class library or console app | | `Microsoft.NET.Sdk.Web` | ASP.NET Core web app | | `Microsoft.NET.Sdk.BlazorWebAssembly` | Blazor WebAssembly app | | `Microsoft.NET.Sdk.Razor` | Razor class library | | `Microsoft.NET.Sdk.Worker` | Worker service | | `Microsoft.NET.Sdk.WindowsDesktop` | WPF or WinForms (legacy SDK style) | | `Aspire.AppHost.Sdk` | Aspire app host | | `Aspire.ServiceDefaults.Sdk` | Aspire service defaults | ### SDK Version Detection Check `global.json` for SDK version constraints: ```json { "sdk": { "version": "9.0.100", "rollForward": "latestMinor" } } ``` Key SDK version ranges: - `9.0.x` - .NET 9 (current LTS candidate) - `8.0.x` - .NET 8 (LTS) - `7.0.x` - .NET 7 (end of support) - `6.0.x` - .NET 6 (LTS) - `5.0.x` - .NET 5 (end of support) - `3.1.x` - .NET Core 3.1 (end of support) ## Target Framework Detection ### Target Framework Monikers (TFM) Detect from `<TargetFramework>` or `<TargetFrameworks>` in project files: | TFM Pattern | Platform | |-------------|----------| | `net9.0`, `net8.0`, `net7.0`, `net6.0` | Modern .NET | | `net9.0-windows`, `net8.0-windows` | Windows-specific workload | | `net9.0-ios`, `net9.0-android`, `net9.0-maccatalyst` | MAUI/mobile | | `net9.0-browser` | Blazor WebAssembly | | `netstandard2.0`, `netstandard2.1` | .NET Standard library | | `netcoreapp3.1`, `netcoreapp2.1` | Legacy .NET Core | | `net48`, `net472`, `net461` | .NET Framework | ### Multi-Targeting Projects with `<TargetFrameworks>` (plural) target multiple platforms: ```xml <TargetFrameworks>net8.0;net8.0-windows;net8.0-ios;net8.0-android</TargetFrameworks> ``` ## Workload Detection ### Installed Workloads Check installed workloads via: ```bash dotnet workload list ``` ### Project-Implied Workloads | Indicator | Workload | |-----------|----------| | TFM contains `-ios`, `-android`, `-maccatalyst` | `maui` or individual platform workloads | | TFM contains `-browser` | `wasm-tools` | | Package `Aspire.Hosting` | `aspire` | | Package `Microsoft.WindowsAppSDK` | `windowsdesktop` | ### Workload Manifest Files Check for workload requirements in: - `.config/dotnet-tools.json` - local tools - `Directory.Build.props` - workload version pins - `NuGet.config` - custom feeds for preview workloads ## Language Version Detection ### LangVersion Property Detect from `<LangVersion>` in project files or `Directory.Build.props`: | Value | Language Version | |-------|------------------| | `latest` | Highest version for TFM | | `preview` | Preview features enabled | | `13.0`, `12.0`, `11.0` | Explicit version | | `default` | SDK default | ### Implicit Language Version When `<LangVersion>` is not specified, the SDK sets it based on TFM: - `net9.0` implies C# 13 - `net8.0` implies C# 12 - `net7.0` implies C# 11 - `net6.0` implies C# 10 ## App Model Detection ### Web Apps Look for these indicators: **ASP.NET Core general:** - `Program.cs` with `WebApplication.CreateBuilder` - `Startup.cs` with `ConfigureServices`/`Configure` - `appsettings.json`, `appsettings.Development.json` - `wwwroot/` folder **Blazor:** - `.razor` files - `@page` directive - `RenderModeInteractiveServer`, `RenderModeInteractiveWebAssembly` - `AddInteractiveServerComponents()`, `AddInteractiveWebAssemblyComponents()` - `_Imports.razor` **Minimal APIs:** - `app.MapGet()`, `app.MapPost()`, etc. - No `[ApiController]` classes - Route handlers as lambdas or delegates **MVC/Web API:** - `Controllers/` folder - Classes inheriting `Controller` or `ControllerBase` - `[ApiController]`, `[Route]`, `[HttpGet]` attributes **SignalR:** - Classes inheriting `Hub` or `Hub<T>` - `IHubContext<T>` injection - `MapHub<T>()` calls **gRPC:** - `.proto` files - `Grpc.AspNetCore` package - `MapGrpcService<T>()` calls ### Desktop Apps **MAUI:** - `MauiProgram.cs` - `MauiApp.CreateBuilder()` - `.maui` file extensions - `Microsoft.Maui.*` namespaces **WPF:** - `<UseWPF>true</UseWPF>` in project - `.xaml` files with WPF namespaces - `PresentationFramework` reference - `App.xaml`, `MainWindow.xaml` **WinForms:** - `<UseWindowsForms>true</UseWindowsForms>` in project - `System.Windows.Forms` namespace - `Form` class inheritance - `.Designer.cs` files **WinUI 3:** - `Microsoft.WindowsAppSDK` package - `Microsoft.WinUI` namespace - `WinUIEx` patterns **Uno Platform:** - `Uno.WinUI` or `Uno.UI` packages - Cross-platform XAML with Uno namespaces - Platform head projects ### Worker and Background Services - `<OutputType>Exe</OutputType>` with no web SDK - `BackgroundService` inheritance - `IHostedService` implementation - `Host.CreateDefaultBuilder()` without web ### Azure Functions - `[Function]` attribute - `Microsoft.Azure.Functions.Worker` namespace - `host.json` file - `local.settings.json` file ### Aspire **App Host:** - `Aspire.AppHost.Sdk` - `DistributedApplicationBuilder` - `builder.AddProject<T>()` **Service Defaults:** - `Aspire.ServiceDefaults.Sdk` - `AddServiceDefaults()` extension **Component Usage:** - `Aspire.*` packages - `AddRedis()`, `AddPostgres()`, etc. ## Test Framework Detection | Indicator | Framework | |-----------|-----------| | `Microsoft.NET.Test.Sdk` + `TUnit` | TUnit | | `Microsoft.NET.Test.Sdk` + `xunit` | xUnit | | `Microsoft.NET.Test.Sdk` + `MSTest.TestFramework` | MSTest | | `[Fact]`, `[Theory]` attributes | xUnit | | `[Test]`, `[TestCase]` attributes | TUnit | | `[TestMethod]`, `[TestClass]` attributes | MSTest | ## Build and Quality Tooling Detection ### Analyzers | Package | Tool | |---------|------| | `Microsoft.CodeAnalysis.NetAnalyzers` | Built-in analyzers | | `Roslynator.Analyzers` | Roslynator | | `StyleCop.Analyzers` | StyleCop | | `Meziantou.Analyzer` | Meziantou rules | | `SonarAnalyzer.CSharp` | SonarQube | ### Formatters | Indicator | Tool | |-----------|------| | `.editorconfig` present | dotnet format | | `CSharpier` package or `.csharpierrc` | CSharpier | | `jb` CLI usage | ReSharper CLI | ### Coverage | Package | Tool | |---------|------| | `coverlet.collector` | Coverlet | | `coverlet.msbuild` | Coverlet (MSBuild) | | `ReportGenerator` tool | Report generation | ### Architecture Testing | Package | Tool | |---------|------| | `NetArchTest.Rules` | NetArchTest | | `ArchUnitNET` | ArchUnitNET | ## Common File Locations | File | Purpose | |------|---------| | `*.sln` | Solution file (find all projects) | | `*.csproj`, `*.fsproj`, `*.vbproj` | Project files | | `global.json` | SDK version pinning | | `Directory.Build.props` | Shared MSBuild properties | | `Directory.Build.targets` | Shared MSBuild targets | | `Directory.Packages.props` | Central package management | | `NuGet.config` | NuGet configuration | | `.editorconfig` | Code style and analyzer settings | | `*.ruleset` | Legacy analyzer rules | -
routing.md 5.7 KB
# Routing Decision Tree This reference defines the decision tree for routing tasks from the generic `dotnet` skill to the narrowest matching specialized skill. ## Primary Classification Start by classifying the repository or task by its **primary app model**, then refine by **cross-cutting concerns**. ``` Is the task about a specific framework or platform? | +-- YES --> Route to the platform skill immediately | +-- NO --> Continue to app model detection ``` ## App Model Detection Order Evaluate project indicators in this order and route to the first matching skill: ### 1. Web and API | Indicator | Route To | |-----------|----------| | Blazor components (`.razor`, `@page`, `RenderModeInteractiveServer`) | `dotnet-blazor` | | Minimal API patterns (`app.MapGet`, `app.MapPost`, no controllers) | `dotnet-minimal-apis` | | MVC or Web API controllers (`[ApiController]`, `ControllerBase`) | `dotnet-web-api` | | SignalR hubs (`Hub`, `IHubContext`, `/hubs/` routes) | `dotnet-signalr` | | gRPC services (`.proto`, `Grpc.AspNetCore`) | `dotnet-grpc` | | General ASP.NET Core hosting without specific pattern | `dotnet-aspnet-core` | ### 2. Cloud and Hosting | Indicator | Route To | |-----------|----------| | Aspire app host or service defaults (`Aspire.Hosting`, `AddProject`) | `dotnet-aspire` | | Azure Functions (`[Function]`, `Microsoft.Azure.Functions.Worker`) | `dotnet-azure-functions` | | Background services (`BackgroundService`, `IHostedService`) | `dotnet-worker-services` | ### 3. Desktop and Client | Indicator | Route To | |-----------|----------| | MAUI app (`Microsoft.Maui`, `.maui`) | `dotnet-maui` | | Uno Platform (`Uno.WinUI`, cross-platform XAML) | `dotnet-uno-platform` | | WinUI 3 (`Microsoft.WindowsAppSDK`, `WinUI`) | `dotnet-winui` | | WPF (`UseWPF`, `PresentationFramework`) | `dotnet-wpf` | | Windows Forms (`UseWindowsForms`, `System.Windows.Forms`) | `dotnet-winforms` | | MVVM patterns in any client app | `dotnet-mvvm` | ### 4. Data and Distributed | Indicator | Route To | |-----------|----------| | EF Core (`Microsoft.EntityFrameworkCore`, `DbContext`) | `dotnet-entity-framework-core` | | EF6 (`EntityFramework`, `System.Data.Entity`) | `dotnet-entity-framework6` | | Orleans grains and silos (`Orleans.Core`, `[Grain]`) | `dotnet-orleans` | ### 5. AI and Agentic | Indicator | Route To | |-----------|----------| | Semantic Kernel (`Microsoft.SemanticKernel`, `Kernel.CreateBuilder`) | `dotnet-semantic-kernel` | | Microsoft.Extensions.AI (`IChatClient`, `IEmbeddingGenerator`) | `dotnet-microsoft-extensions-ai` | | Microsoft Agent Framework (`Microsoft.Agents`) | `dotnet-microsoft-agent-framework` | | ML.NET (`Microsoft.ML`, `MLContext`) | `dotnet-mlnet` | | Mixed Reality (`Microsoft.MixedReality`) | `dotnet-mixed-reality` | | MCP servers (`ModelContextProtocol`) | `dotnet-mcp` | ### 6. Legacy | Indicator | Route To | |-----------|----------| | Legacy ASP.NET (`System.Web`, `Global.asax`) | `dotnet-legacy-aspnet` | | WCF (`System.ServiceModel`, `.svc`) | `dotnet-wcf` | | Windows Workflow Foundation (`System.Activities`) | `dotnet-workflow-foundation` | ## Cross-Cutting Concerns After platform routing, check if the task is primarily about a cross-cutting concern: ### Project and Architecture | Concern | Route To | |---------|----------| | Project creation, solution structure, SDK selection | `dotnet-project-setup` | | Architecture decisions, patterns, layering | `dotnet-architecture` | | Microsoft.Extensions patterns (DI, config, logging) | `dotnet-microsoft-extensions` | ### Code Quality and Review | Concern | Route To | |---------|----------| | Code review, PR feedback | `dotnet-code-review` | | Modern C# language features | `dotnet-modern-csharp` | ### Testing | Concern | Route To | |---------|----------| | TUnit test framework | `dotnet-tunit` | | xUnit test framework | `dotnet-xunit` | | MSTest test framework | `dotnet-mstest` | ### Formatting and Analysis | Concern | Route To | |---------|----------| | `dotnet format` usage | `dotnet-format` | | CSharpier formatting | `dotnet-csharpier` | | Built-in code analysis, editorconfig | `dotnet-code-analysis` | | EditorConfig and analyzer configuration | `dotnet-analyzer-config` | | Roslyn analyzers (Roslynator) | `dotnet-roslynator` | | StyleCop rules | `dotnet-stylecop-analyzers` | | Meziantou analyzers | `dotnet-meziantou-analyzer` | | ReSharper CLI tools | `dotnet-resharper-clt` | | CodeQL security scanning | `dotnet-codeql` | ### Quality and CI | Concern | Route To | |---------|----------| | CI quality gates, build pipelines | `dotnet-quality-ci` | | Code coverage collection | `dotnet-coverlet` | | Coverage report generation | `dotnet-reportgenerator` | | Mutation testing | `dotnet-stryker` | | Complexity metrics | `dotnet-complexity` | | Lines of code counting | `dotnet-cloc` | | Duplicate code detection | `dotnet-quickdup` | | Performance profiling | `dotnet-profiling` | ### Architecture Enforcement | Concern | Route To | |---------|----------| | NetArchTest rules | `dotnet-netarchtest` | | ArchUnitNET rules | `dotnet-archunitnet` | ## Multi-Skill Tasks When a task spans multiple skills: 1. **Prefer the user-visible behavior skill first** - if the task is about adding a Blazor feature with tests, start with `dotnet-blazor` 2. **Pull in quality/tooling skills second** - after the feature is implemented, route testing to `dotnet-xunit` or `dotnet-tunit` 3. **Do not combine incompatible guidance** - runner-specific commands and patterns should come from one skill at a time ## Fallback Behavior If no narrower skill matches: 1. Stay at `dotnet` skill 2. Be explicit about missing specialization 3. Provide generic .NET guidance only when necessary 4. Suggest which skill should be created if the gap is recurring
-
-
SKILL.md 4.6 KB
--- name: dotnet version: "1.0.0" category: "Core" description: "Primary router skill for broad .NET work. Classify the repo by app model and cross-cutting concern first, then switch to the narrowest matching .NET skill instead of staying at a generic layer." compatibility: "Requires a .NET repository, solution, or project tree." --- # .NET Router Skill ## Trigger On - the user asks for general `.NET` help without naming a narrower framework or tool - implementing, debugging, reviewing, or refactoring C# or `.NET` code in a repo with multiple app models or frameworks - deciding which `.NET` skill should own a task before editing code - tasks that combine platform work with testing, quality, architecture, setup, or migration decisions ## Workflow 1. Detect the real stack first: - target frameworks and SDK version - `LangVersion` - project SDKs and workload hints - hosting model and app entry points - test framework and runner - analyzers, formatters, coverage, and CI quality gates 2. Route to the narrowest platform skill as soon as the stack is known: - Web: `dotnet-aspnet-core`, `dotnet-minimal-apis`, `dotnet-web-api`, `dotnet-blazor`, `dotnet-signalr`, `dotnet-grpc` - Cloud and hosting: `dotnet-aspire`, `dotnet-azure-functions`, `dotnet-worker-services` - Desktop and client: `dotnet-maui`, `dotnet-wpf`, `dotnet-winforms`, `dotnet-winui` - Data and distributed: `dotnet-entity-framework-core`, `dotnet-entity-framework6`, `dotnet-orleans` - AI and agentic: `dotnet-semantic-kernel`, `dotnet-microsoft-extensions-ai`, `dotnet-microsoft-agent-framework`, `dotnet-mlnet`, `dotnet-mixed-reality` - Legacy: `dotnet-legacy-aspnet`, `dotnet-wcf`, `dotnet-workflow-foundation` 3. Route cross-cutting work to the companion skill instead of keeping it inside generic `.NET` advice: - project bootstrap or repo shape: `dotnet-project-setup`, `dotnet-architecture` - frontend asset analysis in mixed `.NET` plus Node repos: `dotnet-eslint`, `dotnet-stylelint`, `dotnet-htmlhint`, `dotnet-webhint`, `dotnet-biome`, `dotnet-sonarjs`, `dotnet-metalint`, `dotnet-chous` - code review: `dotnet-code-review` - language features: `dotnet-modern-csharp` - testing: `dotnet-tunit`, `dotnet-xunit`, `dotnet-mstest` - format, analyzers, coverage, and CI: `dotnet-format`, `dotnet-code-analysis`, `dotnet-quality-ci`, `dotnet-coverlet`, `dotnet-reportgenerator` - maintainability and architecture rules: `dotnet-complexity`, `dotnet-netarchtest`, `dotnet-archunitnet` 4. If more than one specialized skill applies, prefer the one closest to the user-visible behavior first, then pull in the quality or tooling skill second. 5. Do not stop at this skill once a narrower match exists. This skill should classify and hand off, not become a generic dumping ground. 6. After code changes, validate with the repository's actual build, test, and quality workflow instead of generic `.NET` commands. ## Routing Heuristics - If the repo contains `Microsoft.NET.Sdk.Web`, start from a web skill, not generic `.NET`. - If the repo contains Blazor, Razor Components, or `.razor` pages, prefer `dotnet-blazor`. - If the repo contains `package.json`, frontend lint configs, or browser-facing asset pipelines inside the `.NET` solution, prefer the dedicated frontend analysis skills instead of generic `.NET`. - If the repo contains Orleans grains or silo hosting, prefer `dotnet-orleans`. - If the repo is mostly analyzers, CI, or coverage work, prefer the quality skill directly. - If the user asks about “which skill should I use?”, answer with the narrowest matching skill and explain why in one short sentence. - If no narrower skill matches, keep the work here and stay explicit about the missing specialization. ## Deliver - the correct specialized skill choice for the task - repo-compatible code or documentation changes that stay aligned with the detected stack - validation evidence that matches the real project runner and quality toolchain ## Validate - the chosen downstream skill actually exists in the catalog - platform assumptions match project SDKs, packages, and workloads - generic guidance has been replaced by framework-specific guidance whenever possible - runner-specific commands are not mixed incorrectly - language or runtime features are only used when the repo supports them ## Documentation ### References - [`references/routing.md`](references/routing.md) - Decision tree for routing tasks to specialized .NET skills, including app model classification and cross-cutting concern handling. - [`references/detection.md`](references/detection.md) - Project detection patterns for identifying SDK types, target frameworks, workloads, language versions, and app models.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.