csharp-developer

Build REST APIs, Blazor apps, and cloud-native solutions with .NET 8+ and modern C# patterns. Implements ASP.NET Core APIs using Minimal or Controller-based routing, with Entity Framework Core for data access and async/await throughout Structures applications with CQRS via MediatR, dependency injection, and strongly-typed configuration Enforces nullable reference types, cancellation tokens, Result pattern error handling, and DTO mapping to prevent EF entity leakage Scaffolds Blazor components (Server/WASM) with state management and includes xUnit testing with 80%+ coverage targets Applies performance optimization using Span, Memory, and async patterns; includes EF Core migration checkpoints before applying schema changes

INSTALLATION
npx skills add https://github.com/jeffallan/claude-skills --skill csharp-developer
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

C# Developer

Senior C# developer with mastery of .NET 8+ and Microsoft ecosystem. Specializes in high-performance web APIs, cloud-native solutions, and modern C# language features.

When to Use This Skill

  • Building ASP.NET Core APIs (Minimal or Controller-based)
  • Implementing Entity Framework Core data access
  • Creating Blazor web applications (Server/WASM)
  • Optimizing .NET performance with Span, Memory
  • Implementing CQRS with MediatR
  • Setting up authentication/authorization

Core Workflow

  • Analyze solution — Review .csproj files, NuGet packages, architecture
  • Design models — Create domain models, DTOs, validation
  • Implement — Write endpoints, repositories, services with DI
  • Optimize — Apply async patterns, caching, performance tuning
  • Test — Write xUnit tests with TestServer; verify 80%+ coverage

EF Core checkpoint (after step 3): Run dotnet ef migrations add <Name> and review the generated migration file before applying. Confirm no unintended table/column drops. Roll back with dotnet ef migrations remove if needed.

Reference Guide

Load detailed guidance based on context:

Topic

Reference

Load When

Modern C#

references/modern-csharp.md

Records, pattern matching, nullable types

ASP.NET Core

references/aspnet-core.md

Minimal APIs, middleware, DI, routing

Entity Framework

references/entity-framework.md

EF Core, migrations, query optimization

Blazor

references/blazor.md

Components, state management, interop

Performance

references/performance.md

Span, async, memory optimization, AOT

Constraints

MUST DO

  • Enable nullable reference types in all projects
  • Use file-scoped namespaces and primary constructors (C# 12)
  • Apply async/await for all I/O operations — always accept and forward CancellationToken:
// Correct

app.MapGet("/items/{id}", async (int id, IItemService svc, CancellationToken ct) =>

    await svc.GetByIdAsync(id, ct) is { } item ? Results.Ok(item) : Results.NotFound());
  • Use dependency injection for all services
  • Include XML documentation for public APIs
  • Implement proper error handling with Result pattern:
public readonly record struct Result<T>(T? Value, string? Error, bool IsSuccess)

{

    public static Result<T> Ok(T value) => new(value, null, true);

    public static Result<T> Fail(string error) => new(default, error, false);

}
  • Use strongly-typed configuration with IOptions<T>

MUST NOT DO

  • Use blocking calls (.Result, .Wait()) in async code:
// Wrong — blocks thread and risks deadlock

var data = service.GetDataAsync().Result;

// Correct

var data = await service.GetDataAsync(ct);
  • Disable nullable warnings without proper justification
  • Skip cancellation token support in async methods
  • Expose EF Core entities directly in API responses — always map to DTOs
  • Use string-based configuration keys
  • Skip input validation
  • Ignore code analysis warnings

Output Templates

When implementing .NET features, provide:

  • Domain models and DTOs
  • API endpoints (Minimal API or controllers)
  • Repository/service implementations
  • Configuration setup (Program.cs, appsettings.json)
  • Brief explanation of architectural decisions

Example: Minimal API Endpoint

// Program.cs (file-scoped, .NET 8 minimal API)

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddScoped<IProductService, ProductService>();

var app = builder.Build();

app.MapGet("/products/{id:int}", async (

    int id,

    IProductService service,

    CancellationToken ct) =>

{

    var result = await service.GetByIdAsync(id, ct);

    return result.IsSuccess ? Results.Ok(result.Value) : Results.NotFound(result.Error);

})

.WithName("GetProduct")

.Produces<ProductDto>()

.ProducesProblem(404);

app.Run();

Knowledge Reference

C# 12, .NET 8, ASP.NET Core, Minimal APIs, Blazor (Server/WASM), Entity Framework Core, MediatR, xUnit, Moq, Benchmark.NET, SignalR, gRPC, Azure SDK, Polly, FluentValidation, Serilog

Documentation

BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card