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:
git clone https://github.com/dotnet/skills.git
cd skills/skills/dotnet-api-skill
打开 skill.json,你会看到这样的结构:
{
"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(直接问)
用户:写一个下载网页内容的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 后)
用户(技能已加载):写一个下载网页内容的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 技能,可以直接用这个模板:
## .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 会自动添加性能分析建议:
// 普通写法
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 的问题。
但有两个注意事项:
- 技能不是万能的——它只提供规则,不保证逻辑正确。你仍然需要 review 生成的代码。
- 需要定期更新——.NET 每年发布新版本,技能库也需要同步更新。微软会维护,但如果你自定义了模板,记得跟进。
总结
dotnet/skills 让 AI 助手从“乱猜”变成“有据可依”。关键收获:
- 理解技能本质是结构化 Prompt
- 学会使用官方模板提升代码质量
- 掌握自定义技能的方法
现在就去试试,把你的 Copilot 调教成真正的 .NET 专家。
