news 2026/5/8 6:27:30

dotnet-skills:让AI助手掌握现代.NET开发最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
dotnet-skills:让AI助手掌握现代.NET开发最佳实践

1. 项目概述

如果你是一位 .NET 开发者,并且正在使用像 Claude、GitHub Copilot、Gemini 或 Codex 这样的 AI 编程助手,那么你很可能经历过这样的挫败感:你满怀期待地输入“使用 Entity Framework Core 创建一个包含用户和订单的数据库上下文”,结果 AI 给你生成了一段充斥着过时的DbContext构造函数和DbSet配置的代码,看起来像是 EF6 时代的产物。或者,你让它“为我的 Blazor Server 应用添加一个组件”,它却给你返回了 Blazor WebAssembly 的启动配置。更别提那些还在为 Minimal API 项目生成Startup.cs的 AI 了。

这种“代沟”的根本原因在于,大多数 AI 模型的训练数据存在滞后性,它们对 .NET 生态的认知可能还停留在几个版本之前。而 .NET 的发展日新月异,从 ASP.NET Core 的架构演进,到 Entity Framework Core 的性能优化,再到 MAUI、Aspire、Orleans 等新框架的涌现,开发者需要的是对最新、最现代实践的理解。

dotnet-skills项目就是为了弥合这道鸿沟而生的。它不是一个普通的代码库,而是一个面向 AI 的 .NET 技能目录。你可以把它理解为一套精心编写的“使用说明书”或“最佳实践指南”,专门用来“教育”你的 AI 助手,让它真正理解现代 .NET 的开发模式、工具链和框架特性。安装这些技能后,你的 AI 助手就不再是一个只会背诵陈旧文档的“复读机”,而是一个能跟上你技术栈的“资深 .NET 顾问”。

1.1 核心价值:从“解释”到“构建”

在没有dotnet-skills之前,我们的工作流是“开发 -> 向 AI 解释上下文 -> 修正 AI 的错误输出 -> 开发”。这中间“解释”和“修正”的环节极大地消耗了我们的心流和效率。

dotnet-skills的目标是将工作流转变为“安装技能 -> 开发”。它通过以下几个核心特性来实现:

  • 社区驱动,与时俱进:技能由 .NET 社区共同维护,紧密跟踪微软官方文档和最佳实践。这意味着当 .NET 9 发布,引入了新的[AsParameters]特性时,对应的 ASP.NET Core 技能会很快更新,确保 AI 生成的代码符合最新规范,而不是沿用旧模式。
  • 跨平台 AI 支持:一套技能,多处使用。无论你日常使用的是 Claude Desktop、VS Code 里的 Copilot、Google 的 Gemini,还是其他兼容的技能系统(如 Codex、Junie),dotnet-skills都提供了统一的安装路径。你再也不用为每个 AI 平台单独编写提示词了。
  • 结构化知识,精准路由:技能目录不是杂乱无章的文档堆砌。它按照.NET Foundations.NET QualityWebDataAI & Agents等逻辑清晰的集合进行分类。更重要的是,它引入了“编排代理”的概念。例如,dotnet-router这个代理就像一个总调度员,能根据你的问题(“如何配置 Serilog?”、“怎么用 Orleans 实现一个 Grains?”)自动将任务路由到最具体的技能(如serilog技能或orleans-grains技能),从而获得最精准的指导。

简单来说,dotnet-skills让 AI 助手真正融入了 .NET 开发现代化的进程,将开发者从重复性的“教学”工作中解放出来,把精力集中在真正的创造性编码上。

1.2 适合谁使用?

  • 全栈 .NET 开发者:日常使用多种 .NET 技术栈(如 ASP.NET Core, EF Core, Blazor, xUnit),并希望 AI 助手能准确理解这些上下文。
  • 团队技术负责人/架构师:希望为团队建立统一的 AI 辅助编码标准,确保生成的代码符合项目规范和最新最佳实践。
  • 开源库维护者:可以为你维护的流行 .NET 库贡献一个技能,让全世界的 AI 用户都能更好地使用你的库。
  • 任何厌倦了向 AI 反复解释 .NET 细节的开发者:如果你曾对 AI 说“不,我们现在不用IHttpContextAccessor那种方式了”,那么这个工具就是为你准备的。

2. 核心架构与设计思路解析

dotnet-skills不仅仅是一个 CLI 工具,它背后是一套完整的、用于增强 AI 对特定领域认知的体系。理解其架构,能帮助我们更好地使用和贡献它。

2.1 技能与代理的双层模型

这是dotnet-skills最核心的设计。它将知识分为两个层次:

  1. 技能:这是最细粒度的知识单元,对应一个具体的、可操作的任务或框架。例如:

    • entity-framework-core:专门指导如何正确使用 EF Core 进行数据建模、迁移、查询。
    • serilog:指导如何配置 Serilog 结构化日志,包括接收器、Enricher 和与 ASP.NET Core 的集成。
    • minimal-apis:阐述 Minimal API 的端点映射、参数绑定、过滤器等现代模式。 每个技能都位于catalog/<类型>/<包名>/skills/<技能名>/目录下,其核心是一个SKILL.md文件,里面包含了 AI 执行该任务所需的全部上下文、步骤、示例和禁忌。
  2. 代理:这是更高一层的抽象,负责任务路由和决策。代理本身不直接解决具体问题,而是像一个专家系统,根据用户的模糊或宽泛的请求,决定调用哪个或哪几个技能。

    • 通用路由代理:如dotnet-router,它能理解“做一个 Web API”、“处理数据库操作”、“写个单元测试”这样的高层意图,并将其分发给aspnetcore-webapientity-framework-corexunit等技能。
    • 领域专家代理:如dotnet-orleans-specialist,它专门处理分布式 Actor 模型框架 Orleans 相关的问题,能理解“Grain”、“Silo”、“Stream”等概念,并路由到更具体的orleans-grainsorleans-streams等技能。
    • 工作流代理:如dotnet-aspire-orchestrator,它专门指导基于 Aspire 的云原生应用编排,涉及 AppHost、服务发现、配置管理等复合任务。

这种设计的精妙之处在于关注点分离。技能作者只需专注于把某个具体技术点讲透,而代理作者则专注于如何理解用户意图并组合技能。这极大地提升了系统的可维护性和扩展性。

2.2 目录结构与元数据管理

项目的目录结构经过精心设计,以支持复杂的包、技能和代理关系。

catalog/ └── <Type>/ # 类型,如 Frameworks, Tools, Platform └── <Package>/ # 包/项目名,如 Entity-Framework-Core, Aspire ├── manifest.json # 包级元数据(标题、描述、图标、相关链接) ├── skills/ │ └── <skill-name>/ │ ├── SKILL.md # 技能核心内容 │ ├── manifest.json # 技能级元数据(版本、触发词等) │ ├── scripts/ # 可选的辅助脚本 │ └── references/ # 可选的参考文档 └── agents/ └── <agent-name>/ ├── AGENT.md # 代理路由逻辑 └── manifest.json # 代理级元数据

关键设计点解析:

  • manifest.json分层:包、技能、代理各有自己的manifest.json。包级别的描述这个库是什么;技能级别的描述这个技能做什么、由哪些 NuGet 包触发;代理级别的描述其路由范围。这避免了将所有元数据塞进 Markdown 文件,保持了SKILL.mdAGENT.md的内容纯净性。
  • SKILL.md内容规范:技能文件的核心是告诉 AI“何时用”“怎么用”。它通常包含:
    • USE FOR:明确的使用场景。这是最重要的部分,决定了 AI 何时会激活这个技能。
    • DO NOT USE FOR:明确的禁忌场景,防止误用。
    • Workflow:一步步的操作指南。
    • Validation:如何验证结果是否正确。
    • References:指向官方文档的链接。 它应包含版本号、分类等元数据,这些都在manifest.json里。
  • 外部源集成:项目通过vendir工具和import_external_catalog_sources.py脚本,可以自动导入并规范化上游社区的技能定义(例如,从其他开源 AI 技能仓库导入)。这保证了生态的开放性,dotnet-skills可以成为 .NET AI 技能的一个聚合中心。

2.3 安装与发现机制

CLI 工具的设计充分考虑了开发者的实际工作流:

  • 基于项目的自动发现dotnet skills install --auto命令会扫描当前目录下的.csproj文件,识别项目引用的 NuGet 包(如Microsoft.EntityFrameworkCore.SqlServer)和项目类型(如Microsoft.NET.Sdk.Web),然后自动安装所有匹配的技能。这是最省心的方式,项目环境一变,技能库也随之更新。
  • 推荐模式dotnet skills recommend命令更保守一些。它只做扫描和推荐,并给出安装命令,把最终决定权交给开发者。这适合在 CI/CD 流水线中做检查,或者在不确定时先看看会安装什么。
  • 捆绑包安装:对于常见的开发场景,项目提供了预定义的“捆绑包”。例如,运行dotnet skills install bundle quality会一次性安装所有与代码质量相关的技能(如format,roslynator,code-analysis)。这比一个个安装技能高效得多。
  • 多代理平台支持:工具能自动检测系统中已安装的 AI 代理平台(通过查找.claude/,.github/,.gemini/等目录),并将技能安装到所有支持的平台。它也提供了一个后备的共享目录~/.agents/skills/供其他兼容工具使用。

实操心得:对于新项目,我习惯在创建解决方案后,直接运行dotnet skills install --auto。这能确保我的 AI 助手从一开始就“懂”这个项目。对于已有项目,我则会先运行dotnet skills recommend看看推荐列表,再决定是全部安装 (--auto) 还是选择性安装。

3. 完整实操指南:从安装到高效使用

理论讲完了,我们上手实操。以下步骤假设你是在一个典型的 .NET 开发环境中(Windows/macOS/Linux,已安装 .NET SDK)。

3.1 环境准备与工具安装

首先,你需要安装dotnet-skills这个全局工具。同时,为了使用编排代理功能,建议也安装对应的代理 CLI 工具。你可以二选一,也可以都安装。

# 1. 安装核心技能管理工具 dotnet tool install --global dotnet-skills # 2. 安装编排代理管理工具(选择一种你喜欢的命令行风格) # 选项 A:使用 dotnet agents 命令(与 dotnet skills 风格统一) dotnet tool install --global dotnet-agents # 选项 B:使用独立的 agents 命令(更简洁) dotnet tool install --global agents

安装完成后,可以通过dotnet skills versiondotnet agents version(或agents version) 来验证安装是否成功,并检查是否有新版本。

3.2 技能安装的三种核心模式

安装技能有三种主要方式,适用于不同场景。

模式一:基于当前项目的自动安装(推荐)

这是最常用、最智能的方式。进入你的 .NET 项目根目录(包含.csproj.sln文件),然后执行:

dotnet skills install --auto

这个命令会:

  1. 扫描当前目录下所有的.csproj文件。
  2. 提取所有<PackageReference><ProjectReference>
  3. 识别项目 SDK 类型(如Microsoft.NET.Sdk.Web)。
  4. 在技能目录中查找所有与之匹配的技能。
  5. 将这些技能安装到你系统中已检测到的 AI 代理目录中(如~/.claude/skills/)。

例如,如果你的项目引用了Microsoft.EntityFrameworkCore.SqlServerSerilog.AspNetCore,并且是一个 Web 项目,那么entity-framework-coreserilogaspnetcore-webapi等技能很可能就会被自动安装。

模式二:安装预定义的技能捆绑包

如果你正在搭建一个特定类型项目的开发环境,或者想快速获得某一领域的全面支持,可以使用捆绑包。

# 安装所有代码质量相关的技能(格式化、分析器、复杂度检查等) dotnet skills install bundle quality # 安装前端代码质量技能(针对 Blazor/前端项目) dotnet skills install bundle frontend-quality # 安装 Orleans 分布式应用开发所需的技能集 dotnet skills install bundle orleans # 安装与微软云采用框架(MCAF)治理相关的技能 dotnet skills install bundle mcaf

运行dotnet skills bundle list可以查看所有可用的捆绑包。

模式三:手动安装特定技能

当你明确知道自己需要某个特定技能时,可以直接安装。

# 安装单个技能 dotnet skills install blazor # 一次性安装多个技能 dotnet skills install xunit moq fluentassertions # 为特定的 AI 代理安装技能(例如,只给 Claude 安装) dotnet skills install aspnetcore-webapi --agent claude

3.3 使用交互式控制中心

dotnet-skillsCLI 提供了一个强大的交互式控制中心,这是探索和管理技能的绝佳方式。

# 直接运行以下命令,会启动一个基于终端的交互式界面 dotnet skills

在控制中心里,你可以:

  • 按集合浏览:像在网站上一样,浏览.NET FoundationsWebData等分类下的所有技能。
  • 查看已安装的技能:快速了解当前项目或全局环境下已经安装了哪些技能。
  • 进行分析:工具可以分析你的项目结构,给出技能使用建议和令牌数统计。
  • 预览安装:在真正写入文件前,预览将要安装或移除的技能列表。
  • 管理代理:查看和安装可用的编排代理。

对于不熟悉命令行的用户,或者想直观了解技能生态全貌时,控制中心是首选。

3.4 技能与代理的日常管理

安装后,你需要知道如何查看、更新和移除它们。

# 查看所有已安装的技能(在当前目标目录下) dotnet skills list --local # 查看所有可用的技能(完整的目录) dotnet skills list # 更新所有已安装的技能到目录的最新版本 dotnet skills update # 更新特定的技能 dotnet skills update entity-framework-core serilog # 移除一个技能 dotnet skills remove blazor # 移除一个捆绑包中的所有技能 dotnet skills remove bundle quality # 移除一个集合中的所有技能(例如所有 Web 相关技能) dotnet skills remove collection web # 清除所有已安装的技能 dotnet skills remove --all

代理的管理命令类似

# 列出可用的编排代理 dotnet agents list # 安装代理(例如,安装总路由器代理) dotnet agents install router # 自动安装代理到所有检测到的平台 dotnet agents install router --auto # 移除代理 dotnet agents remove router

3.5 在 AI 助手中验证效果

安装完成后,如何验证技能是否生效?这取决于你使用的 AI 平台。

  • Claude Desktop:技能会安装在~/.claude/skills/(全局)或项目目录下的.claude/skills/。重启 Claude Desktop 应用,在新的对话中,当你提到相关技术时,Claude 的回答应该会体现出更专业、更现代的 .NET 知识,并且可能直接引用技能中的工作流。
  • GitHub Copilot (Chat):技能会安装在~/.copilot/skills/.github/skills/。在 VS Code 的 Copilot Chat 中,你可以尝试问一些之前它可能回答不好的 .NET 8 特性问题,观察其回答的准确性是否提升。
  • Cursor:由于 Cursor 底层也使用 Claude 等模型,并且支持技能目录,安装到 Claude 的技能路径通常也能被 Cursor 识别。可以在 Cursor 的 AI 聊天中测试。
  • 其他平台:如 Gemini、Codex 等,请参考其官方文档确认技能目录的加载机制。

一个简单的测试方法是,问一个具有版本特异性的问题,例如:“在 .NET 8 的 Minimal API 中,如何优雅地进行参数验证?” 一个未受训练的 AI 可能会给出基于 FluentValidation 或 DataAnnotations 的旧式答案,而一个加载了minimal-apisvalidation技能的 AI,则更可能给出使用IEndpointFilter或新的[AsParameters]结合IValidatableObject的现代方案。

4. 为你的 .NET 库贡献一个技能

dotnet-skills的强大之处在于其社区驱动。如果你维护一个流行的 .NET 开源库,或者对某个框架有深刻理解,为其贡献一个技能能让成千上万的开发者受益。

4.1 贡献前的准备工作

  1. Fork 仓库:访问managedcode/dotnet-skills的 GitHub 仓库,点击 Fork 按钮,创建你自己的副本。
  2. 克隆仓库到本地
    git clone https://github.com/<你的用户名>/dotnet-skills.git cd dotnet-skills
  3. 熟悉目录结构:花点时间浏览catalog/目录,看看现有的技能是如何组织的。特别是找一个与你想贡献的库类似的技能作为参考。

4.2 创建技能的核心步骤

假设我们要为一个虚构的、用于处理缓存的库AwesomeCache创建一个技能。

步骤一:确定技能类型和包名

首先,需要确定技能放在哪个分类下。查看catalog/下的类型目录:

  • Frameworks/:用于像 Entity Framework Core、Orleans 这样的应用框架。
  • Libraries/:用于像 Serilog、Polly 这样的通用库。
  • Tools/:用于像dotnet formatRoslynator这样的开发工具。
  • Platform/:用于像 .NET 运行时、C# 语言本身这样的平台级主题。

AwesomeCache是一个库,所以我们选择Libraries。包名我们定为AwesomeCache

步骤二:创建技能目录和文件

在项目根目录下执行(或手动创建目录):

# 创建包目录和技能目录 mkdir -p catalog/Libraries/AwesomeCache/skills/awesome-cache cd catalog/Libraries/AwesomeCache/skills/awesome-cache

现在,创建必要的文件:

  1. 创建包级 manifest.json(catalog/Libraries/AwesomeCache/manifest.json):

    { "id": "AwesomeCache", "title": "AwesomeCache", "description": "A high-performance, distributed cache library for .NET.", "icon": "icon.svg", // 可选,可以放一个库的logo "links": { "repository": "https://github.com/awesome-org/awesomecache", "docs": "https://awesomecache.net/docs", "nuget": "https://www.nuget.org/packages/AwesomeCache" } }
  2. 创建技能级 manifest.json(catalog/Libraries/AwesomeCache/skills/awesome-cache/manifest.json):

    { "id": "awesome-cache", "title": "AwesomeCache", "description": "Use the AwesomeCache library for high-performance caching scenarios in .NET applications.", "version": "1.0.0", "category": "Libraries", "package": "AwesomeCache", "package_prefix": "AwesomeCache", "tags": ["caching", "distributed", "performance", "libraries"], "trigger": [ "AwesomeCache", "distributed cache", "IDistributedCache alternative", "high performance cache" ] }
    • trigger字段至关重要!它定义了哪些用户提问会激活这个技能。要仔细思考用户可能用什么关键词来询问关于这个库的问题。
  3. 创建核心技能文件 SKILL.md(catalog/Libraries/AwesomeCache/skills/awesome-cache/SKILL.md):

    # AwesomeCache Use the AwesomeCache library when a .NET application needs a high-performance, feature-rich distributed caching solution beyond the basic `IDistributedCache` interface. ## USE FOR * Implementing a fast in-memory cache with advanced eviction policies (LRU, LFU). * Setting up a distributed cache backend (Redis, SQL Server) with serialization and compression. * Needing cache regions, tags, or dependency invalidation. * Performing cache operations asynchronously with Polly resilience policies integrated. * Monitoring cache hit/miss ratios and performance metrics. ## DO NOT USE FOR * Simple `IMemoryCache` scenarios where a single-server, non-distributed cache is sufficient. * HTTP response caching (use `Microsoft.AspNetCore.ResponseCaching` instead). * Session state storage (use `Microsoft.AspNetCore.Session`). ## WORKFLOW 1. **Installation**: Add the `AwesomeCache` NuGet package to your project. ```xml <PackageReference Include="AwesomeCache" Version="2.5.0" /> ``` 2. **Service Registration**: In your `Program.cs` or `Startup.cs`, register AwesomeCache services. ```csharp // For in-memory cache builder.Services.AddAwesomeCacheInMemory(); // For distributed Redis cache builder.Services.AddAwesomeCacheRedis("localhost:6379"); // Optional: Configure global settings like default expiration builder.Services.Configure<AwesomeCacheOptions>(options => { options.DefaultAbsoluteExpiration = TimeSpan.FromMinutes(30); }); ``` 3. **Dependency Injection**: Inject `IAwesomeCache` into your classes. ```csharp public class MyService { private readonly IAwesomeCache _cache; public MyService(IAwesomeCache cache) => _cache = cache; } ``` 4. **Basic Operations**: ```csharp // Set a value await _cache.SetAsync("user:123", userData, TimeSpan.FromMinutes(10)); // Get a value var data = await _cache.GetAsync<UserData>("user:123"); if (data != null) { /* cache hit */ } // Remove a value await _cache.RemoveAsync("user:123"); // Get or create (thread-safe) var heavyData = await _cache.GetOrCreateAsync("report:2024", async entry => { entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1); return await GenerateExpensiveReportAsync(); }); ``` 5. **Advanced Features**: * **Tags**: Group cache entries and invalidate by tag. * **Regions**: Isolate cache data for different tenants or modules. * **Events**: Subscribe to cache item removed/updated events. ## VALIDATION * Verify that `IAwesomeCache` is registered in the service provider. * Write a simple integration test that sets and retrieves a value. * Use the `AwesomeCache.Diagnostics` package to monitor cache performance in Application Insights or OpenTelemetry. ## REFERENCES * [Official Documentation](https://awesomecache.net/docs) * [GitHub Repository](https://github.com/awesome-org/awesomecache) * [NuGet Package](https://www.nuget.org/packages/AwesomeCache)

    写作要点

    • USE FOR/DO NOT USE FOR要清晰、具体,这是 AI 路由的黄金标准。
    • WORKFLOW要提供可复制粘贴的代码示例,从安装到基本使用。
    • 语言要简洁、准确,面向的是 AI,但最终服务于开发者。

步骤三:本地测试与生成

在提交之前,最好在本地预览一下你的技能在生成后的网站和目录中是什么样子。

# 在项目根目录运行生成脚本 python3 scripts/generate_catalog.py python3 scripts/generate_pages.py

这会在artifacts/github-pages/目录下生成静态网站,你可以在浏览器中打开index.html查看。同时,README.md中的目录表格也会更新,你可以检查你的技能是否被正确列出。

步骤四:提交 Pull Request

完成以上步骤后,将你的更改提交到你的 Fork 仓库,然后向原managedcode/dotnet-skills仓库发起 Pull Request。项目维护者会 review 你的贡献,并可能提出修改建议。一旦合并,你的技能就会出现在下一个发布的目录版本中,惠及所有开发者。

注意事项:在编写SKILL.md时,务必避免包含版本号、分类等元信息。这些信息应严格放在manifest.json文件中。保持关注点分离是维护大型技能目录的关键。

5. 高级技巧与疑难排查

在深度使用dotnet-skills的过程中,我积累了一些能提升效率的技巧,也遇到过一些典型问题。

5.1 高效使用技巧

  1. 组合使用--auto--prune:在长期项目中,依赖项可能会变化。定期运行dotnet skills install --auto --prune可以智能地移除那些不再被项目需要的“陈旧”技能,保持技能集的整洁。这对于在多个分支间切换或重构项目后特别有用。
  2. 利用项目级技能覆盖全局技能:技能可以安装在全局(~/.claude/skills/)或项目本地(.claude/skills/)。项目本地的技能优先级更高。你可以为某个特定项目安装一个定制版的技能(例如,修改了工作流),而不会影响其他项目。这在处理遗留项目或具有特殊规范的项目时非常有效。
  3. 关注“编排代理”:不要只安装技能,花点时间了解并安装像dotnet-routerdotnet-build这样的代理。它们能大幅提升 AI 处理复杂、模糊需求的能力。例如,直接问“帮我优化这个项目的构建速度”,dotnet-build代理可能会依次调用build-perf-baselinebuild-perf-diagnosticsbuild-parallelism等多个技能,给你一个综合性的解决方案。
  4. 查看令牌数:每个技能文件都有大小。如果你关心 AI 模型的上下文窗口限制,可以使用dotnet skills catalog tokens --catalog-root .命令导出 JSON,查看每个技能的令牌数。这有助于你决定是安装完整的技能集,还是只安装核心技能。

5.2 常见问题与解决方案

问题现象可能原因解决方案
运行dotnet skills后无响应或报错1. 网络问题,无法从 GitHub Releases 获取最新目录。
2. Python 脚本执行环境问题(本地预览时)。
3. 工具版本过旧。
1. 检查网络,或设置环境变量DOTNET_SKILLS_SKIP_UPDATE_CHECK=1跳过更新检查。
2. 确保本地安装了 Python 3,并安装了所需依赖(如rich)。
3. 运行dotnet tool update --global dotnet-skills更新工具。
技能已安装,但 AI 助手似乎没反应1. 技能未安装到正确的 AI 代理目录。
2. AI 客户端未重启或未重新加载技能。
3. 技能的trigger关键词与你的问题不匹配。
1. 使用dotnet skills where查看技能安装路径,确认是否在你期望的 AI 目录下。
2. 重启你的 AI 桌面应用或 IDE。
3. 查看技能的manifest.json,了解其触发条件,调整你的提问方式。
dotnet skills install --auto未安装预期的技能1. 项目.csproj中引用的 NuGet 包名称与技能定义的package_prefix不匹配。
2. 该技能尚未被收录在目录中。
1. 使用dotnet skills list查看所有可用技能,确认是否存在对应包名的技能。你也可以运行dotnet skills recommend查看工具的建议。
2. 考虑为你需要的库贡献一个技能!
安装代理时提示“No native agent directory found”dotnet agents install --auto只会向已存在的原生代理目录安装。如果你从未启动过 Claude Desktop 等应用,其目录可能不存在。1. 先启动一次你的 AI 应用(如 Claude Desktop),创建其配置目录。
2. 或者,使用--agent参数指定目标,并配合--target指定一个自定义路径。例如:dotnet agents install router --agent claude --target ~/my-custom-agents/
在 CI/CD 中如何使用?需要在构建机器上安装技能,以确保 AI 代码审查或生成的一致性。在 CI 脚本中添加步骤:
1.dotnet tool install --global dotnet-skills
2.dotnet skills install --auto(或安装特定捆绑包)
3. 确保后续的 AI 步骤(如通过 API 调用)能访问到安装技能的路径。

5.3 性能与维护考量

  • 目录更新频率:目录每天 UTC 时间 04:00 会自动发布新版本(格式如2026.3.15.0)。dotnet skills update命令会拉取最新版本。对于追求稳定性的团队,可以考虑在 CI 中固定一个目录版本号(虽然 CLI 目前主要通过--catalog-version支持,但自动更新是默认行为)。
  • 技能质量:技能的质量取决于社区贡献。遇到不准确或过时的技能,最好的方式是查看该技能所在的目录,直接修改SKILL.md并提交 PR。这也是开源协作的魅力所在。
  • 与内部知识库结合dotnet-skills解决的是公共的、通用的 .NET 知识。对于公司内部的私有框架、特定规范,你完全可以参照它的格式,建立自己内部的技能目录,并配置 AI 助手同时加载公共和私有目录。

dotnet-skills代表了一种新的开发者与 AI 协作的范式:从被动地纠正 AI,转变为主动地塑造和赋能 AI。它通过结构化的社区知识,将 .NET 领域的最新实践“编码”到 AI 的上下文中。作为开发者,我们不仅是使用者,更可以成为贡献者,共同塑造这个不断进化的智能助手生态系统。开始安装技能,体验那种 AI 终于“懂你”的流畅感,并在遇到缺失的技能时,毫不犹豫地成为那个填补空白的人。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 6:26:37

为什么很多人 DFS 写得飞起,一到「矩阵最长递增路径」就彻底懵了?

为什么很多人 DFS 写得飞起,一到「矩阵最长递增路径」就彻底懵了? 有一类算法题,非常容易让人产生错觉。 看起来只是: 矩阵 + DFS结果一写。 不是超时。 就是死循环。 再不然: 明明逻辑没错 结果性能直接爆炸而「矩阵中的最长递增路径(Longest Increasing Path in a…

作者头像 李华
网站建设 2026/5/8 6:25:35

Vestige:一个被遗忘的Node.js极简API框架遗珠

1. 项目概述&#xff1a;一个被遗忘的Web框架遗珠在Web开发这个快速迭代的领域里&#xff0c;我们每天都能听到关于React、Vue、Next.js这些明星框架的讨论。但如果你像我一样&#xff0c;在这个行业里摸爬滚打了十几年&#xff0c;就会知道&#xff0c;真正解决问题的往往不是…

作者头像 李华
网站建设 2026/5/8 6:19:59

前端安全:XSS防御最佳实践

前端安全&#xff1a;XSS防御最佳实践 前言 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的前端安全漏洞&#xff0c;它允许攻击者在用户的浏览器中执行恶意脚本。XSS攻击可以导致会话劫持、数据泄露、网站篡改等严重问题。今天&#x…

作者头像 李华
网站建设 2026/5/8 6:19:56

不止于性能:拆解STM32H7多域架构如何重塑你的嵌入式应用设计思路

不止于性能&#xff1a;拆解STM32H7多域架构如何重塑你的嵌入式应用设计思路 在嵌入式系统设计领域&#xff0c;性能参数表上的数字竞赛已经持续了太久。当我们把目光从MHz和DMIPS的简单对比中移开&#xff0c;STMicroelectronics的STM32H7系列带来的真正革新才浮出水面——它不…

作者头像 李华
网站建设 2026/5/8 6:11:37

高德顺风车xck、an参数逆向

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包 内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;侵权通过头像私信或名字简介叫我删除博…

作者头像 李华
网站建设 2026/5/8 6:08:56

本地运行大语言模型:Dalai项目实现LLaMA/ALpaca轻量级部署

1. 项目概述&#xff1a;在本地运行大型语言模型的轻量级方案如果你对ChatGPT这类大语言模型背后的技术感到好奇&#xff0c;或者想在自己的电脑上体验一下“私有化部署”一个类似模型的感觉&#xff0c;但又苦于动辄几十GB的显存要求和复杂的部署流程&#xff0c;那么dalai这个…

作者头像 李华