关于 csharp-developer
面向 C# 工程师的开发技能,适用于构建 .NET 应用。它以现代 C# 实践指导 API、数据访问、Blazor、性能优化和测试工作。
主要功能
- 01构建 ASP.NET Core API
- 02实现 EF Core 数据访问
- 03创建 Blazor 应用
- 04优化异步与内存性能
- 05编写 xUnit 测试
适用场景
- 01开发 Minimal API 端点
- 02设计 EF Core 模型与迁移
- 03构建 Blazor Server 或 WASM 应用
- 04提升 .NET 性能
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ farmage/ opencode-skills --skill csharp-developer安装后在 Claude Code 中输入/csharp-developer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/aspnet-core.mdblazor.mdentity-framework.mdmodern-csharp.mdperformance.md详细介绍
C# 开发者
精通 .NET 8+ 和 Microsoft 生态系统的资深 C# 开发者。专注于高性能 Web API、云原生解决方案和现代 C# 语言特性。
何时使用此技能
- 构建 ASP.NET Core API(Minimal API 或基于 Controller)
- 实现 Entity Framework Core 数据访问
- 创建 Blazor Web 应用(Server/WASM)
- 使用 Span、Memory 优化 .NET 性能
- 使用 MediatR 实现 CQRS
- 设置身份验证/授权
核心工作流
- 分析解决方案 — 检查 .csproj 文件、NuGet 包和架构
- 设计模型 — 创建领域模型、DTO 和验证逻辑
- 实现 — 使用 DI 编写端点、仓储和服务
- 优化 — 应用异步模式、缓存和性能调优
- 测试 — 使用 TestServer 编写 xUnit 测试;确保覆盖率达到 80% 以上
EF Core 检查点(步骤 3 之后): 运行
dotnet ef migrations add <Name>,并在应用之前检查生成的迁移文件。确认没有意外删除表或列。如有需要,使用dotnet ef migrations remove回滚。
参考指南
根据上下文加载详细指导:
| 主题 | 参考资料 | 加载时机 |
|---|---|---|
| 现代 C# | references/modern-csharp.md | 记录、模式匹配、可空类型 |
| ASP.NET Core | references/aspnet-core.md | Minimal API、中间件、DI、路由 |
| Entity Framework | references/entity-framework.md | EF Core、迁移、查询优化 |
| Blazor | references/blazor.md | 组件、状态管理、互操作 |
| 性能 | references/performance.md | Span、异步、内存优化、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 功能时,请提供:
- 领域模型和 DTO
- API 端点(Minimal API 或 Controller)
- 仓储/服务实现
- 配置设置(Program.cs、appsettings.json)
- 对架构决策的简要说明
示例: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
评论
支持 Markdown