GitHub 2.3k星!微软官方AI编码技能库实战指南

今天 GitHub 上一个 .NET 相关项目突然爆火——dotnet/skills,一天之内新增 2353 个 star。我第一时间 clone 下来试了一遍,发现这玩意儿对 C# 开发者来说,简直是给 AI 助手开了个外挂。

这个项目解决什么问题?

你平时用 ChatGPT、Claude 或者 Copilot 写 C# 代码时,有没有遇到过这种情况:

  • AI 推荐了过时的 API(比如还在用 WebClient
  • 生成的代码不符合 .NET 最佳实践(比如没处理 CancellationToken
  • 或者干脆不知道 .NET 8 的新特性

dotnet/skills 就是微软官方为了解决这个问题推出的。它是一套为 AI 助手指定的 .NET 编码技能库,本质上是高度结构化的提示词集合,让 AI 能准确理解 .NET 的当前版本、API 用法和编码规范。

核心思路:把知识塞进 Prompt 里

很多人以为给 AI 写 Prompt 就是“帮我写个 HTTP 请求”,但这样出来的代码质量全看运气。微软的做法是:把 .NET 团队积累的最佳实践、API 变更记录、性能建议,直接编码成可复用的技能模块

这些技能不是普通 Prompt,而是带版本号、带示例代码、带限制条件的结构化指令。AI 加载后,相当于立刻拥有了一个 .NET 专家的大脑。

快速上手:5 分钟跑通第一个技能

项目结构很清晰,每个技能就是一个文件夹。我们先试试最常用的 dotnet-api-skill

bash
1 2
git clone https://github.com/dotnet/skills.git
cd skills/skills/dotnet-api-skill

打开 skill.json,你会看到这样的结构:

json
1 2 3 4 5 6
{
  "name": "dotnet-api-skill",
  "version": "1.0.0",
  "description": "帮助AI助手理解和推荐正确的.NET API",
  "prompt": "你是一个.NET API专家。遵循以下规则:\n1. 优先推荐.NET 8及以上版本的API\n2. 避免使用已弃用的API\n3. 提供完整的using指令\n4. 包含CancellationToken参数\n5. 给出最少一个真实场景示例"
}

你可以直接把这个 Prompt 喂给任何 AI 聊天工具。但更高级的用法是结合 GitHub Copilot 或自定义工具链。

效果对比:差 Prompt vs 好 Prompt

我用一个简单任务做了测试:“写一个下载网页内容的C#方法”

❌ 差 Prompt(直接问)

text
1 2 3 4 5 6 7 8 9 10
用户:写一个下载网页内容的C#方法

AI输出:
public string DownloadString(string url)
{
    using (WebClient client = new WebClient())
    {
        return client.DownloadString(url);
    }
}

问题:WebClient 在 .NET 6 已标记为过时,建议用 HttpClient。而且没有异步、没有异常处理、没有 CancellationToken

✅ 好 Prompt(加载 dotnet-api-skill 后)

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
用户(技能已加载):写一个下载网页内容的C#方法

AI输出:
public async Task<string> DownloadStringAsync(string url, CancellationToken cancellationToken = default)
{
    using HttpClient client = new HttpClient();
    try
    {
        return await client.GetStringAsync(url, cancellationToken);
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"下载失败: {ex.Message}");
        throw;
    }
}

区别明显:

  • 使用了 HttpClient(当前推荐)
  • 异步模式(符合现代 C# 实践)
  • 支持取消操作(生产环境必备)
  • 有异常处理

完整技能模板(可直接复制)

如果你想给自己常用的 AI 工具添加 .NET 技能,可以直接用这个模板:

markdown
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
## .NET 编码技能

你是一个 .NET 专家,版本为 .NET 8。请遵循以下规则:

### API 选择
- 优先使用 `HttpClient` 而非 `WebClient`
- 使用 `System.Text.Json` 而非 `Newtonsoft.Json`(除非有特殊兼容需求)
- 文件操作使用 `File` 静态类,避免 `StreamReader/Writer` 手动管理

### 编码规范
- 所有 I/O 操作必须使用 `async/await`
- 方法参数包含 `CancellationToken cancellationToken = default`
- 使用 `using` 声明而非 `using` 语句块(C# 8+)
- 使用 `record` 类型表示不可变数据

### 性能建议
- 对于高频调用,复用 `HttpClient` 实例
- 字符串拼接使用 `StringBuilder` 或字符串插值
- 集合操作优先使用 LINQ,但注意延迟执行

### 需要避免的
- 不要使用 `WebClient`、`WebRequest`、`BinaryFormatter`
- 不要在循环中创建 `HttpClient`
- 不要忽略 `await` 警告

### 输出格式
- 提供完整可运行的代码片段
- 包含必要的 `using` 指令
- 如果涉及配置,推荐使用 `appsettings.json`

更多技能变体

项目里还有几个值得关注的技能:

1. dotnet-performance-skill

专注于 .NET 性能优化。加载后,AI 会自动添加性能分析建议:

csharp
1 2 3 4 5 6 7
// 普通写法
var list = new List<int>();
for (int i = 0; i < 1000; i++) list.Add(i);

// 技能优化后
var list = new List<int>(1000); // 预分配容量,避免动态扩容
for (int i = 0; i < 1000; i++) list.Add(i);

2. dotnet-security-skill

安全编码指南。AI 会自动加入:

  • SQL 参数化查询
  • 防 XSS 编码
  • 敏感数据保护建议

3. dotnet-testing-skill

测试最佳实践。生成的代码会包含:

  • 单元测试示例(xUnit 或 NUnit)
  • Mock 策略
  • 测试数据生成

我的使用建议

说实话,这个项目虽然叫“技能”,但它本质上是一份高质量的 .NET 提示词工程模板。我试过把它加载到 Claude 和 GPT-4 中,代码质量确实有提升,尤其是避免了过时 API 的问题。

但有两个注意事项:

  1. 技能不是万能的——它只提供规则,不保证逻辑正确。你仍然需要 review 生成的代码。
  2. 需要定期更新——.NET 每年发布新版本,技能库也需要同步更新。微软会维护,但如果你自定义了模板,记得跟进。

总结

dotnet/skills 让 AI 助手从“乱猜”变成“有据可依”。关键收获:

  • 理解技能本质是结构化 Prompt
  • 学会使用官方模板提升代码质量
  • 掌握自定义技能的方法

现在就去试试,把你的 Copilot 调教成真正的 .NET 专家。

github stars trending dotnet