Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when building .NET 8 applications with minimal APIs, clean architecture, or cloud-native microservices. Invoke for Entity Framework Core, CQRS with MediatR, JWT authentication, AOT compilation.
.claude/skills/jeffallan-dotnet-core-expert/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-12 | ✓→✓ | = Same ✓ | -4% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 55% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 60% | 0% |
dotnet build to verify compilation — if build fails, review errors, fix issues, and rebuild before proceedingdotnet test to confirm all tests pass — if tests fail, diagnose failures, fix the implementation, and re-run before continuing; verify endpoints with curl or a REST clientLoad detailed guidance based on context:
| Topic | Reference | Load When | |-------|-----------|-----------| | Minimal APIs | references/minimal-apis.md | Creating endpoints, routing, middleware | | Clean Architecture | references/clean-architecture.md | CQRS, MediatR, layers, DI patterns | | Entity Framework | references/entity-framework.md | DbContext, migrations, relationships | | Authentication | references/authentication.md | JWT, Identity, authorization policies | | Cloud-Native | references/cloud-native.md | Docker, health checks, configuration |
<Nullable>enable</Nullable> in the .csprojawait dbContext.Users.ToListAsync()public record UserDto(int Id, string Name);WebApplicationFactory<Program>csharp// Program.cs var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly)); var app = builder.Build(); app.UseSwagger(); app.UseSwaggerUI(); app.MapGet("/users/{id}", async (int id, ISender sender, CancellationToken ct) => { var result = await sender.Send(new GetUserQuery(id), ct); return result is null ? Results.NotFound() : Results.Ok(result); }) .WithName("GetUser") .Produces<UserDto>() .ProducesProblem(404); app.Run();
csharp// Application/Users/GetUserQuery.cs public record GetUserQuery(int Id) : IRequest<UserDto?>; public sealed class GetUserQueryHandler : IRequestHandler<GetUserQuery, UserDto?> { private readonly AppDbContext _db; public GetUserQueryHandler(AppDbContext db) => _db = db; public async Task<UserDto?> Handle(GetUserQuery request, CancellationToken ct) => await _db.Users .AsNoTracking() .Where(u => u.Id == request.Id) .Select(u => new UserDto(u.Id, u.Name)) .FirstOrDefaultAsync(ct); }
csharp// Infrastructure/AppDbContext.cs public sealed class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options) { public DbSet<User> Users => Set<User>(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly); } } // Usage in a service public async Task<IReadOnlyList<UserDto>> GetAllAsync(CancellationToken ct) => await _db.Users .AsNoTracking() .Select(u => new UserDto(u.Id, u.Name)) .ToListAsync(ct);
csharppublic record UserDto(int Id, string Name); public record CreateUserRequest(string Name, string Email);
When implementing .NET features, provide:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 13,399 | 6,731 | -50% | 1 | 1 | 0% | 2,697 | 2,595 | -4% | 0 | 0 | — |
case-05 | pass→pass | 13,479 | 15,463 | +15% | 1 | 1 | 0% | 2,994 | 4,626 | +55% | 0 | 0 | — |
case-01 | fail→fail | 25,680 | 20,777 | -19% | 1 | 1 | 0% | 6,207 | 6,729 | +8% | 0 | 0 | — |
case-02 | fail→fail | 18,143 | 21,637 | +19% | 1 | 1 | 0% | 4,120 | 6,082 | +48% | 0 | 0 | — |
case-03 | fail→fail | 21,068 | 18,793 | -11% | 1 | 1 | 0% | 4,986 | 5,815 | +17% | 0 | 0 | — |
case-04 | pass→pass | 12,415 | 12,851 | +4% | 1 | 1 | 0% | 2,456 | 3,935 | +60% | 0 | 0 | — |
case-06 | pass→pass | 19,081 | 21,752 | +14% | 1 | 1 | 0% | 4,006 | 4,564 | +14% | 0 | 0 | — |
case-07 | pass→pass | 13,949 | 10,614 | -24% | 1 | 1 | 0% | 2,830 | 3,547 | +25% | 0 | 0 | — |
case-08 | pass→pass | 8,067 | 7,152 | -11% | 1 | 1 | 0% | 1,813 | 2,586 | +43% | 0 | 0 | — |
case-09 | pass→pass | 8,604 | 7,527 | -13% | 1 | 1 | 0% | 1,877 | 2,757 | +47% | 0 | 0 | — |
case-10 | fail→pass | 13,198 | 13,069 | -1% | 1 | 1 | 0% | 2,691 | 4,057 | +51% | 0 | 0 | — |
case-11 | pass→pass | 11,402 | 7,695 | -33% | 1 | 1 | 0% | 2,461 | 2,860 | +16% | 0 | 0 | — |
case-13 | pass→pass | 9,004 | 9,026 | +0% | 1 | 1 | 0% | 1,904 | 3,009 | +58% | 0 | 0 | — |
case-14 | fail→pass | 9,928 | 8,880 | -11% | 1 | 1 | 0% | 2,117 | 3,032 | +43% | 0 | 0 | — |
case-15 | pass→pass | 7,210 | 5,183 | -28% | 1 | 1 | 0% | 1,472 | 2,228 | +51% | 0 | 0 | — |
case-16 | pass→pass | 15,027 | 16,207 | +8% | 1 | 1 | 0% | 3,103 | 4,405 | +42% | 0 | 0 | — |
case-17 | pass→pass | 38,856 | 13,512 | -65% | 1 | 1 | 0% | 3,898 | 4,260 | +9% | 0 | 0 | — |
case-18 | pass→pass | 12,006 | 8,848 | -26% | 1 | 1 | 0% | 2,450 | 3,022 | +23% | 0 | 0 | — |
case-19 | pass→pass | 9,813 | 7,392 | -25% | 1 | 1 | 0% | 1,630 | 2,618 | +61% | 0 | 0 | — |
case-20 | pass→pass | 12,745 | 11,936 | -6% | 1 | 1 | 0% | 2,580 | 3,540 | +37% | 0 | 0 | — |
case-21 | pass→pass | 5,644 | 3,736 | -34% | 1 | 1 | 0% | 1,220 | 1,838 | +51% | 0 | 0 | — |
case-22 | pass→pass | 7,616 | 6,404 | -16% | 1 | 1 | 0% | 1,497 | 2,317 | +55% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.