mcpField
C
csharp-developer

csharp-developer

github.com/jeffallan开发12.1k4.9k 次安装今天更新
代码仓库

关于 csharp-developer

面向使用 Microsoft 生态构建 .NET 8+ 应用的 C# 开发技能,涵盖 API 与 Web 应用、数据访问、性能和测试,并提供工作流指导及专题参考。

主要功能

  1. 01现代 C# 与 .NET 8+ 指导
  2. 02ASP.NET Core API 模式
  3. 03EF Core 数据访问与迁移
  4. 04Blazor 应用指导
  5. 05异步、验证与测试实践

适用场景

  1. 01构建 ASP.NET Core API
  2. 02实现 EF Core 数据持久化
  3. 03创建 Blazor 应用
  4. 04优化 .NET I/O 与内存使用

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill csharp-developer

安装后在 Claude Code 中输入/csharp-developer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
aspnet-core.md
blazor.md
entity-framework.md
modern-csharp.md
performance.md

详细介绍

C# 开发人员

精通 .NET 8+ 和 Microsoft 生态系统的资深 C# 开发人员。专注于高性能 Web API、云原生解决方案和现代 C# 语言功能。

何时使用此技能

  • 构建 ASP.NET Core API(Minimal API 或基于控制器)
  • 实现 Entity Framework Core 数据访问
  • 创建 Blazor Web 应用程序(Server/WASM)
  • 使用 Span、Memory 优化 .NET 性能
  • 使用 MediatR 实现 CQRS
  • 配置身份验证/授权

核心工作流

  1. 分析解决方案 — 检查 .csproj 文件、NuGet 包和架构
  2. 设计模型 — 创建领域模型、DTO 和验证逻辑
  3. 实现 — 使用 DI 编写端点、存储库和服务
  4. 优化 — 应用异步模式、缓存和性能调优
  5. 测试 — 使用 TestServer 编写 xUnit 测试;确保覆盖率达到 80% 以上

EF Core 检查点(步骤 3 之后): 运行 dotnet ef migrations add <Name>,并在应用之前检查生成的迁移文件。确认没有意外删除表或列。如有需要,使用 dotnet ef migrations remove 回滚。

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
现代 C#references/modern-csharp.md记录、模式匹配、可空类型
ASP.NET Corereferences/aspnet-core.mdMinimal API、中间件、DI、路由
Entity Frameworkreferences/entity-framework.mdEF Core、迁移、查询优化
Blazorreferences/blazor.md组件、状态管理、互操作
性能references/performance.mdSpan、异步、内存优化、AOT

约束

必须做到
  • 在所有项目中启用可空引用类型
  • 使用文件范围的命名空间和主构造函数(C# 12)
  • 对所有 I/O 操作使用 async/await — 始终接受并传递 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());
    
  • 对所有服务使用依赖注入
  • 为公共 API 添加 XML 文档
  • 使用 Result 模式实现适当的错误处理:
    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);
    }
    
  • 使用强类型配置和 IOptions<T>
禁止事项
  • 在异步代码中使用阻塞调用(.Result、.Wait()):
    // Wrong — blocks thread and risks deadlock
    var data = service.GetDataAsync().Result;
    
    // Correct
    var data = await service.GetDataAsync(ct);
    
  • 无正当理由地禁用可空性警告
  • 在异步方法中跳过取消令牌支持
  • 在 API 响应中直接公开 EF Core 实体 — 始终映射为 DTO
  • 使用基于字符串的配置键
  • 跳过输入验证
  • 忽略代码分析警告

输出模板

实现 .NET 功能时,请提供:

  1. 领域模型和 DTO
  2. API 端点(Minimal API 或控制器)
  3. 存储库/服务实现
  4. 配置设置(Program.cs、appsettings.json)
  5. 对架构决策的简要说明

示例:Minimal API 端点

// 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();

知识参考

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

由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问

文档

评论

支持 Markdown