让AI帮你写.NET代码:这个GitHub项目太香了

最近在GitHub上发现一个宝藏项目——dotnet/skills,专门教AI编程助手写.NET和C#代码。目前已经2338颗星,而且今天还涨了。如果你平时用Copilot、Cursor、Claude这类工具写C#,这个项目能直接让你少踩很多坑。

它解决什么问题?

你有没有这种经历:让AI帮你写个C#的API,结果它生成了一堆过时的语法,或者用错了命名空间,甚至推荐了已经不推荐的库。

问题不在于AI不行,而是它缺少**.NET生态的上下文**。比如它不知道.NET 8才刚出,或者不知道System.Text.Json已经比Newtonsoft.Json更推荐。

AI code editor with .NET error suggestion

dotnet/skills 就是把这些“潜规则”打包成提示词,让AI每次调用时都带上正确的上下文。你不需要自己写一堆prompt,直接引用它的技能库就行。

核心思路:给AI喂“正确答案”

项目里每个技能其实就是一段结构化的提示词,告诉AI:

  • 写代码时要遵循哪些最佳实践(比如用异步、避免Task.Result
  • 用哪个库版本(比如.NET 8用Microsoft.Extensions.DependencyInjection
  • 避免哪些坑(比如不要手动管理线程池)

举个例子,项目里有个技能叫csharp-best-practices,里面明确写了:

“对于IO操作,始终使用async/await,不要用Task.Wait()

当你用Copilot时,如果激活了这个技能,AI生成的代码就会自动带上async关键字,而不是给你一个同步阻塞的版本。

完整提示词模板(可直接复制)

项目里每个技能都是一个YAML文件,但你可以直接复制核心内容到你的提示词里。这里是一个简化版,适合贴在ChatGPT或Claude的系统提示里:

markdown
1 2 3 4 5 6 7 8 9
你是一个精通.NET 8和C# 12的编程助手。请遵循以下规则:

1. **使用异步模式**:所有IO操作(文件、网络、数据库)必须用async/await。
2. **首选System.Text.Json**:除非有特殊需求,否则不要用Newtonsoft.Json。
3. **使用依赖注入**:在ASP.NET Core项目中,始终通过构造函数注入服务。
4. **避免过时API**:不要使用`[Obsolete]`标记的方法,比如`HttpClient.PostAsync`没问题,但不要用`WebClient`。
5. **命名规范**:遵循微软官方规范,PascalCase用于类/方法,camelCase用于参数/局部变量。

当用户给出需求时,先思考是否符合以上规则,再生成代码。

如果你想更精确,可以直接从项目里复制某个技能文件的内容,比如skills/csharp-best-practices/skill.json(实际路径可能不同,但原理一样)。

效果演示:输入→输出对比

场景:让AI写一个从数据库读取用户列表的API。

没加技能时的输出

csharp
1 2 3 4 5 6 7
public List<User> GetUsers() {
    var db = new SqlConnection("connection string");
    var cmd = new SqlCommand("SELECT * FROM Users", db);
    db.Open();
    var reader = cmd.ExecuteReader();
    // ... 同步代码,且没有using
}

问题:同步阻塞、没释放资源、硬编码连接字符串。

加了技能后的输出

csharp
1 2 3 4 5 6 7 8 9 10 11
public async Task<List<User>> GetUsersAsync(string connectionString) {
    var users = new List<User>();
    await using var db = new SqlConnection(connectionString);
    var cmd = new SqlCommand("SELECT * FROM Users", db);
    await db.OpenAsync();
    await using var reader = await cmd.ExecuteReaderAsync();
    while (await reader.ReadAsync()) {
        users.Add(new User { Name = reader.GetString(0) });
    }
    return users;
}

整洁、异步、资源管理到位,还用了await using

code comparison before and after applying skills

变体和注意事项

  1. 不同AI工具用法不同

    • 如果你用GitHub Copilot,可以在.github/copilot-instructions.md里写这些规则。
    • 如果你用Cursor,可以把它加到rules.md文件里。
    • 如果你用ChatGPT/Claude,直接粘贴到系统提示里就行。
  2. 不要一股脑全加:项目里有几十个技能,比如aspnet-core, entity-framework, blazor等。建议只激活你当前项目相关的,避免AI被过多规则搞糊涂。

  3. 定期更新:.NET每年更新,技能库也会跟进。比如.NET 9马上要出了,到时候记得拉取最新版。

  4. 自定义你的规则:如果你的团队有自己的代码风格(比如禁止用var),直接改提示词里的对应行即可。

总结

dotnet/skills 不是让你学新东西,而是让AI帮你写得更规范。你只需要花5分钟把规则塞给AI,之后它生成的代码就基本不用改。

试试把上面的模板复制到你常用的AI工具里,然后让它写个File.ReadAllTextAsync的示例,你会发现效果立竿见影。

如果你有更好的.NET提示词技巧,欢迎在评论区分享。