Install
Terminal · npx$
npx skills add https://github.com/mhagrelius/dotfiles --skill dotnet-10-csharp-14Works with Paperclip
How Dotnet 10 Csharp 14 fits into a Paperclip company.
Dotnet 10 Csharp 14 drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.
S
SaaS FactoryPaired
Pre-configured AI company — 18 agents, 18 skills, one-time purchase.
$27$59
Explore packSource file
SKILL.md260 linesExpandCollapse
---name: dotnet-10-csharp-14description: Use when building .NET 10 or C# 14 applications; when using minimal APIs, modular monolith patterns, or feature folders; when implementing HTTP resilience, Options pattern, Channels, or validation; when seeing outdated patterns like old extension method syntax--- # .NET 10 & C# 14 Best Practices .NET 10 (LTS, Nov 2025) with C# 14. Covers minimal APIs, not MVC. **Official docs:** [.NET 10](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview) | [C# 14](https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-14) | [ASP.NET Core 10](https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-10.0) ## Detail Files | File | Topics ||------|--------|| [csharp-14.md](csharp-14.md) | Extension blocks, `field` keyword, null-conditional assignment || [minimal-apis.md](minimal-apis.md) | Validation, TypedResults, filters, modular monolith, vertical slices || [security.md](security.md) | JWT auth, CORS, rate limiting, OpenAPI security, middleware order || [infrastructure.md](infrastructure.md) | Options, resilience, channels, health checks, caching, Serilog, EF Core, keyed services || [testing.md](testing.md) | WebApplicationFactory, integration tests, auth testing || [anti-patterns.md](anti-patterns.md) | HttpClient, DI captive, blocking async, N+1 queries || [libraries.md](libraries.md) | MediatR, FluentValidation, Mapster, ErrorOr, Polly, Aspire | --- ## Quick Start ```xml<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net10.0</TargetFramework> <LangVersion>14</LangVersion> <Nullable>enable</Nullable> </PropertyGroup></Project>``` ```csharpvar builder = WebApplication.CreateBuilder(args); // Core servicesbuilder.Services.AddValidation();builder.Services.AddProblemDetails();builder.Services.AddOpenApi(); // Securitybuilder.Services.AddAuthentication().AddJwtBearer();builder.Services.AddAuthorization();builder.Services.AddRateLimiter(opts => { /* see security.md */ }); // Infrastructurebuilder.Services.AddHealthChecks();builder.Services.AddOutputCache(); // Modulesbuilder.Services.AddUsersModule(); var app = builder.Build(); // Middleware (ORDER MATTERS - see security.md)app.UseExceptionHandler();app.UseHttpsRedirection();app.UseCors();app.UseRateLimiter();app.UseAuthentication();app.UseAuthorization();app.UseOutputCache(); app.MapOpenApi();app.MapHealthChecks("/health");app.MapUsersEndpoints();app.Run();``` --- ## Decision Flowcharts ### Result vs Exception ```dotdigraph { "Error type?" [shape=diamond]; "Expected?" [shape=diamond]; "Result<T>/ErrorOr" [shape=box]; "Exception" [shape=box]; "Error type?" -> "Expected?" [label="domain"]; "Error type?" -> "Exception" [label="infrastructure"]; "Expected?" -> "Result<T>/ErrorOr" [label="yes"]; "Expected?" -> "Exception" [label="no"];}``` ### IOptions Selection ```dotdigraph { "Runtime changes?" [shape=diamond]; "Per-request?" [shape=diamond]; "IOptions<T>" [shape=box]; "IOptionsSnapshot<T>" [shape=box]; "IOptionsMonitor<T>" [shape=box]; "Runtime changes?" -> "IOptions<T>" [label="no"]; "Runtime changes?" -> "Per-request?" [label="yes"]; "Per-request?" -> "IOptionsSnapshot<T>" [label="yes"]; "Per-request?" -> "IOptionsMonitor<T>" [label="no"];}``` ### Channel Type ```dotdigraph { "Trust producer?" [shape=diamond]; "Can drop?" [shape=diamond]; "Bounded+Wait" [shape=box,style=filled,fillcolor=lightgreen]; "Bounded+Drop" [shape=box]; "Unbounded" [shape=box]; "Trust producer?" -> "Unbounded" [label="yes"]; "Trust producer?" -> "Can drop?" [label="no"]; "Can drop?" -> "Bounded+Drop" [label="yes"]; "Can drop?" -> "Bounded+Wait" [label="no"];}``` --- ## Key Patterns Summary ### C# 14 Extension Blocks```csharpextension<T>(IEnumerable<T> source){ public bool IsEmpty => !source.Any();}``` ### .NET 10 Built-in Validation```csharpbuilder.Services.AddValidation();app.MapPost("/users", (UserDto dto) => TypedResults.Ok(dto));``` ### TypedResults (Always Use)```csharpapp.MapGet("/users/{id}", async (int id, IUserService svc) => await svc.GetAsync(id) is { } user ? TypedResults.Ok(user) : TypedResults.NotFound());``` ### Module Pattern```csharppublic static class UsersModule{ public static IServiceCollection AddUsersModule(this IServiceCollection s) => s .AddScoped<IUserService, UserService>(); public static IEndpointRouteBuilder MapUsersEndpoints(this IEndpointRouteBuilder app) { var g = app.MapGroup("/api/users").WithTags("Users"); g.MapGet("/{id}", GetUser.Handle); return app; }}``` ### HTTP Resilience```csharpbuilder.Services.AddHttpClient<IApi, ApiClient>() .AddStandardResilienceHandler();``` ### Error Handling (RFC 9457)```csharpbuilder.Services.AddProblemDetails();app.UseExceptionHandler();app.UseStatusCodePages();``` --- ## MANDATORY Patterns (Always Use These) | Task | ✅ ALWAYS Use | ❌ NEVER Use ||------|--------------|--------------|| Extension members | C# 14 `extension<T>()` blocks | Traditional `this` extension methods || Property validation | C# 14 `field` keyword | Manual backing fields || Null assignment | `obj?.Prop = value` | `if (obj != null) obj.Prop = value` || API returns | `TypedResults.Ok()` | `Results.Ok()` || Options validation | `.ValidateOnStart()` | Missing validation || HTTP resilience | `AddStandardResilienceHandler()` | Manual Polly configuration || Timestamps | `DateTime.UtcNow` | `DateTime.Now` | --- ## Quick Reference Card ```┌─────────────────────────────────────────────────────────────────┐│ .NET 10 / C# 14 PATTERNS │├─────────────────────────────────────────────────────────────────┤│ EXTENSION PROPERTY: extension<T>(IEnumerable<T> s) { ││ public bool IsEmpty => !s.Any(); ││ } │├─────────────────────────────────────────────────────────────────┤│ FIELD KEYWORD: public string Name { ││ get => field; ││ set => field = value?.Trim(); ││ } │├─────────────────────────────────────────────────────────────────┤│ OPTIONS VALIDATION: .BindConfiguration(Section) ││ .ValidateDataAnnotations() ││ .ValidateOnStart(); // CRITICAL! │├─────────────────────────────────────────────────────────────────┤│ HTTP RESILIENCE: .AddStandardResilienceHandler(); │├─────────────────────────────────────────────────────────────────┤│ TYPED RESULTS: TypedResults.Ok(data) ││ TypedResults.NotFound() ││ TypedResults.Created(uri, data) │├─────────────────────────────────────────────────────────────────┤│ ERROR PATTERN: ErrorOr<User> or user?.Match(...) │├─────────────────────────────────────────────────────────────────┤│ IOPTIONS: IOptions<T> → startup, no reload ││ IOptionsSnapshot<T> → per-request reload ││ IOptionsMonitor<T> → live + OnChange() │└─────────────────────────────────────────────────────────────────┘``` --- ## Anti-Patterns Quick Reference | Anti-Pattern | Fix ||--------------|-----|| `new HttpClient()` | Inject `HttpClient` or `IHttpClientFactory` || `Results.Ok()` | `TypedResults.Ok()` || Manual Polly config | `AddStandardResilienceHandler()` || Singleton → Scoped | Use `IServiceScopeFactory` || `GetAsync().Result` | `await GetAsync()` || Exceptions for flow | Use `ErrorOr<T>` Result pattern || `DateTime.Now` | `DateTime.UtcNow` || Missing `.ValidateOnStart()` | Always add to Options registration | See [anti-patterns.md](anti-patterns.md) for complete list. --- ## Libraries Quick Reference | Library | Package | Purpose ||---------|---------|---------|| MediatR | `MediatR` | CQRS || FluentValidation | `FluentValidation.DependencyInjectionExtensions` | Validation || Mapster | `Mapster.DependencyInjection` | Mapping || ErrorOr | `ErrorOr` | Result pattern || Polly | `Microsoft.Extensions.Http.Resilience` | Resilience || Serilog | `Serilog.AspNetCore` | Logging | See [libraries.md](libraries.md) for usage examples.Related skills
1password
Install 1password skill for Claude Code from steipete/clawdis.
3d Web Experience
Install 3d Web Experience skill for Claude Code from sickn33/antigravity-awesome-skills.
Ab Test Setup
This handles the full A/B testing workflow from hypothesis formation to statistical analysis. It walks you through proper test design, calculates sample sizes,