mcpField
W
winmd-api-search

winmd-api-search

github.com/github开发40.5k5.7k 次安装今天更新
代码仓库

关于 winmd-api-search

winmd-api-search 是帮助开发者查找 Windows API 或检查类型签名的技能。它搜索本地 WinMD 元数据缓存,默认涵盖 Platform SDK 和 WinAppSDK。

主要功能

  1. 01搜索 API 名称和成员
  2. 02查看类型签名及枚举值
  3. 03列出命名空间、项目和包
  4. 04索引 SDK、NuGet 及项目 WinMD 元数据

适用场景

  1. 01为 Windows 功能查找 API
  2. 02编写代码前核对成员
  3. 03查询枚举值
  4. 04查看项目可用的 API

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/github/awesome-copilot --skill winmd-api-search

安装后在 Claude Code 中输入/winmd-api-search确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE.txt
scripts/
Invoke-WinMdQuery.ps1
Update-WinMdCache.ps1
scripts/cache-generator/
CacheGenerator.csproj
Directory.Build.props
Directory.Build.targets
Directory.Packages.props
Program.cs

详细介绍

WinMD API 搜索

此技能可帮助你为任何功能找到合适的 Windows API,并获取其完整详细信息。它会搜索来自以下来源的所有 WinMD 元数据的本地缓存:

  • Windows Platform SDK — 所有 Windows.* WinRT API(始终可用,无需还原)
  • WinAppSDK / WinUI — 作为基线捆绑在缓存生成器中(始终可用,无需还原)
  • NuGet 包 — 已还原项目中任何包含 .winmd 文件的额外包
  • 项目输出的 WinMD — 生成 .winmd 作为构建输出的类库(C++/WinRT、C#)

即使是在全新克隆、没有还原或构建的情况下,你仍可获得完整的 Platform SDK + WinAppSDK 覆盖范围。

何时使用此技能

  • 用户想要构建某项功能,而你需要找到提供该能力的 API
  • 用户询问“我该怎么做 X?”,其中 X 涉及某项平台功能(摄像头、文件、通知、传感器、AI 等)
  • 在编写代码之前,你需要某个类型的确切方法、属性、事件或枚举值
  • 你不确定某项 UI 或系统任务该使用哪个控件、类或接口

先决条件

  • .NET SDK 8.0 或更高版本 — 构建缓存生成器所必需。如不可用,请从 dotnet.microsoft.com 安装。

缓存设置(首次使用前必需)

所有查询和搜索命令都从本地 JSON 缓存读取。你必须在运行任何查询之前生成缓存。

# All projects in the repo (recommended for first run)
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1

# Single project
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1 -ProjectDir <project-folder>

基线覆盖范围(Platform SDK + WinAppSDK)无需项目还原或构建。对于额外的 NuGet 包,项目需要 dotnet restore(这会生成 project.assets.json)或一个 packages.config 文件。

缓存存储在 Generated Files\winmd-cache\,按包+版本去重。

索引内容
来源可用时机
Windows Platform SDK始终(从本地 SDK 安装读取)
WinAppSDK(最新)始终(作为基线捆绑在缓存生成器中)
WinAppSDK Runtime当系统上安装时(通过 Get-AppxPackage 检测)
项目 NuGet 包在 dotnet restore 之后或存在 packages.config 时
项目输出的 .winmd在项目构建之后(生成 WinMD 的类库)

注意: 此缓存目录应加入 .gitignore — 它是生成产物,而非源文件。

如何使用

选择与当前情况相符的路径:


发现 — “我不知道该用哪个 API”

用户用自己的话描述一项能力。你需要找到正确的 API。

0. 确保缓存已存在

如果缓存尚未生成,请先运行 Update-WinMdCache.ps1 — 参见上文的缓存设置。

1. 将用户语言转换为 → 搜索关键词

把用户的日常语言映射为编程术语。尝试多种变体:

用户说尝试的搜索关键词(按顺序)
“拍张照片”camera, capture, photo, MediaCapture
“从磁盘加载”file open, picker, FileOpen, StorageFile
“描述里面有什么”image description, Vision, Recognition
“显示一个弹窗”dialog, flyout, popup, ContentDialog
“拖放”drag, drop, DragDrop
“保存设置”settings, ApplicationData, LocalSettings

从简单的日常用词开始。如果结果较弱或不相关,再尝试更技术性的变体。

2. 运行搜索

.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action search -Query "<keyword>"

这会返回按排名排列的命名空间,其中包含最匹配的类型以及 JSON 文件路径。

如果结果分数较低(低于 60)或不相关,则退回到搜索在线文档:

  1. 使用网络搜索在 Microsoft Learn 上找到正确的 API,例如:
    • site:learn.microsoft.com/uwp/api <capability keywords> 用于 Windows.* API
    • site:learn.microsoft.com/windows/windows-app-sdk/api/winrt <capability keywords> 用于 Microsoft.* WinAppSDK API
  2. 阅读文档页面,确定哪个类型符合用户的需求。
  3. 一旦知道类型名称,回来使用 -Action members 或 -Action enums 获取确切的本地签名。

3. 读取 JSON 以选择正确的 API

读取顶部结果中路径对应的文件。该 JSON 包含该命名空间中的所有类型 — 完整成员、签名、参数、返回类型、枚举值。

阅读并判断哪些类型和成员符合用户的需求。

4. 查阅官方文档以获取上下文

缓存中仅包含签名 — 没有描述或用法指导。如需解释、示例和备注,请在 Microsoft Learn 上查找该类型:

命名空间前缀文档基础 URL
Windows.*https://learn.microsoft.com/uwp/api/{fully.qualified.typename}
Microsoft.* (WinAppSDK)https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/{fully.qualified.typename}

例如,Microsoft.UI.Xaml.Controls.NavigationView 映射到: https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview

5. 使用 API 知识来回答或编写代码


查询 — “我知道这个 API,给我看细节”

你已经知道(或怀疑)类型或命名空间名称。直接执行:

# Get all members of a known type
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action members -TypeName "Microsoft.UI.Xaml.Controls.NavigationView"

# Get enum values
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action enums -TypeName "Microsoft.UI.Xaml.Visibility"

# List all types in a namespace
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action types -Namespace "Microsoft.UI.Xaml.Controls"

# Browse namespaces
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action namespaces -Filter "Microsoft.UI"

如果你需要 -Action members 所显示内容之外的完整细节,使用 -Action search 获取 JSON 文件路径,然后直接读取该 JSON 文件。


其他命令
# List cached projects
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action projects

# List packages for a project
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action packages

# Show stats
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action stats

如果只缓存了一个项目,-Project 会自动选择。 如果存在多个项目,请添加 -Project <name>(使用 -Action projects 查看可用名称)。 在扫描模式下,清单名称会包含一个短哈希后缀以避免冲突;如果无歧义,你可以传入不带后缀的基础项目名称。

搜索评分

搜索会将类型名称和成员名称与你的查询进行排名匹配:

分数匹配类型示例
100名称完全匹配Button → Button
80以……开头Navigation → NavigationView
60包含Dialog → ContentDialog
50PascalCase 首字母ASB → AutoSuggestBox
40多关键词 ANDnavigation item → NavigationViewItem
20模糊字符匹配NavVw → NavigationView

结果按命名空间分组。分数较高的命名空间会排在前列。

故障排除

问题修复
“未找到缓存”运行 Update-WinMdCache.ps1
“多个项目已缓存”添加 -Project <name>
“未找到命名空间”使用 -Action namespaces 列出可用命名空间
“未找到类型”使用完全限定名(例如 Microsoft.UI.Xaml.Controls.Button)
NuGet 更新后数据陈旧重新运行 Update-WinMdCache.ps1
缓存出现在 git 历史中将 Generated Files/ 添加到 .gitignore

参考资料

评论

支持 Markdown