Community编程与开发github.com

chere005/AgentTeam

用于构建 .NET 8+、ASP.NET Core API 或 Blazor Web 应用的 C# 开发技能。涵盖 REST API、Entity Framework Core、异步模式、CQRS 和 Blazor 组件。

AgentTeam 是什么?

该技能定义了一位高级 C# 开发人员,专注于 .NET 8+ 及微软生态系统,擅长高性能 Web API、云原生解决方案和现代 C# 特性。它指导 AI 智能体构建 ASP.NET Core API(支持 Minimial 和 Controller 路由)、使用 Entity Framework Core 进行数据库访问、创建 Blazor Web 应用、优化 .NET 性能(Span<T>、Memory<T>)、通过 MediatR 实现 CQRS 模式以及设置认证/授权。核心工作流包括分析解决方案、设计模型、实现端点和服务、应用异步和性能优化并编写单元测试。技能提供了详细的参考指南,涵盖现代 C#、EF Core、Blazor 和性能调优,并明确规定了“必须做”和“禁止做”的编码约束,例如启用可空引用类型、使用文件范围命名空间和主构造函数、在异步方法中始终转发 CancellationToken、避免阻塞调用以及不将 EF Core 实体直接暴露给 API。该技能还提供输出模板和示例代码,支持 Cursor 和 Claude Code 等平台。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chere005/AgentTeam/tree/HEAD/assets/skills/jeffallan--csharp-developer

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

C# 开发人员

高级 C# 开发人员,精通 .NET 8+ 及微软生态系统。专注于高性能 Web API、云原生解决方案和现代 C# 语言特性。

何时使用此技能

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

核心工作流

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

EF Core 检查点(步骤 3 之后): 运行 dotnet ef migrations add <名称> 并在应用前检查生成的迁移文件。确认没有意外的表/列删除。如果需要,使用 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、async、内存优化、AOT

约束

必须做

  • 在所有项目中启用可空引用类型
  • 使用文件范围命名空间和主构造函数(C# 12)
  • 对所有 I/O 操作应用 async/await — 始终接受并转发 CancellationToken:
    // 正确
    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()):
    // 错误 — 阻塞线程并有死锁风险
    var data = service.GetDataAsync().Result;
    
    // 正确
    var data = await service.GetDataAsync(ct);
    
  • 在没有正当理由的情况下禁用可空警告
  • 在异步方法中跳过 cancellation token 支持
  • 在 API 响应中直接暴露 EF Core 实体 — 始终映射到 DTO
  • 使用基于字符串的配置键
  • 跳过输入验证
  • 忽略代码分析警告

输出模板

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

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

示例:Minimal API 端点

// Program.cs(文件范围,.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 首席顾问

文档

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相关技能