关于 dotnet-inspect
dotnet-inspect 是面向开发者的命令行技能,可查询 .NET API、库、包及依赖证据。它支持发现与深入检查、版本比较,以及创建和编辑可移植的 Workspace 定义。
主要功能
- 01发现 API 与包
- 02检查类型、成员和库
- 03比较 API 与实现变更
- 04追踪跨版本的 API 历史
- 05创建和编辑可移植 Workspace
适用场景
- 01在平台库中查找 .NET API
- 02检查包的依赖和许可证文件
- 03比较包版本中的破坏性变更
- 04追踪 API 在各版本中的变更
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ richlander/ dotnet-inspect --skill dotnet-inspect安装后在 Claude Code 中输入/dotnet-inspect确认已加载。
详细介绍
dotnet-inspect
使用 dotnet-inspect 从本地库、已配置源中的包和平台库中查找证据,包括 API 和依赖项。
运行 dnx dotnet-inspect -y -- <command-or-target>。-y 跳过确认,-- 将剩余参数传递给 dotnet-inspect。先确定需要哪类结果。如果意图或结果范围不明确,请使用裸目标,让路由器选择。否则,直接进入匹配的空间。平台查询会在请求的版本可用时使用已安装的包;否则会使用由包提供的源。对于非传统安装,请验证 <root>/packs,并设置进程级 DOTNET_ROOT,而不是 PATH。
常见起点
| 目标 | 命令 |
|---|---|
| 发现已安装的能力 | 如果知道任务,但不知道命令、键或章节,请运行 explain <task-text>,对已安装的能力进行相似度搜索。例如,运行 explain literal,将结果中的 Explain 路径复制到 explain <path> .hal --json,然后遵循其生产绑定:package query Microsoft.Azure.SignalR --where "library-literal=https://" --tfm net8.0 --json。如果已知道路由,可直接使用 -D 或 -Q。 |
| 发现或检查包 | package query Foo 可发现完全匹配的包 ID;字面匹配包 ID 前缀时,使用 package query 'Foo.*'。然后使用 package <exact-id> 检查已知包。 |
| 发现 API 符号 | 如果未指定范围,find 会搜索已安装的 .NET Runtime、ASP.NET Core 和 .NET Standard 平台程序集群,包括框架程序集群中随附的 Microsoft.Extensions 程序集。尝试运行 find JsonSerializer -n 5 --table、find ControllerBase -n 5 --table 或 find OptionsBuilder -n 5 --table。通过显式指定 --package Foo@version、已还原的 --project path/to/project,或使用类型/成员模式指定 --package-prefix PREFIX,可将包 API 纳入范围:find IChatClient --package Microsoft.Extensions.AI.Abstractions -n 5 --table 会返回 Microsoft.Extensions.AI.IChatClient。使用 package query Pattern 发现包 ID;添加 --members 可查找成员名称。使用 --tfm 进行显式 Package 或 Platform 搜索时,Find 会保留其 Markdown、提示、表格、根数组 JSON、确切实现资源和兼容的 TFM。 |
| 检查类型 | type Type --package Foo;添加 --all 可包含非公开/隐藏成员。-k 用于选择逻辑声明类型:显式属性/事件使用 property/event,而 explicit-interface-implementation 用于选择未组合的显式方法。选择 -S Source 可优先显示作者编写的源代码,并在明确标注的上下文中提供回退内容;PDB Source 和 Decompiled Source 仍是特定于提供程序的视图。 |
| 检查重载 | member Type --platform Lib -m Name -S "Member Index" |
| 选择重载 | member Type --platform Lib Name:1 或 Name~digest |
| 关联某个成员的 Findings | member Type Method:1 --package Foo -S "Finding Census" --json 会返回一个作用域限定于该回执的 Facts 和带注释的源代码封套。加载 skill query,了解选择和格式限制。 |
| 发现合法的查询值或演示 | explain vocabularies --json 会列出已安装的词汇表。将返回的路径复制到 explain <path> .hal --json;读取其中嵌入的值和相关词汇表。使用 demo list 查看产品主页中的场景。 |
| 发现查询维度和运算符 | library -Q 会列出支持查询的章节;type -Q "Body Shapes" 或 library -Q "Performance: Arrays" --json 可说明可接受的键和运算符,无需检查内容。 |
| 查找呈现的函数体语法 | library path/to.dll --where "Kind=ObjectCreationExpression"、type Type --library path/to.dll --where "Kind=InvocationExpression" 或 member Type Method:1 --library path/to.dll --where "Kind=InvocationExpression";加载 skill decompiler,了解稳定的类型和坐标。 |
| 比较 API 或方法体 | diff --package [email protected] --breaking(新 API 使用 --additive;分配回归使用 --alloc-regressions;确切的 Implementation Diff 章节使用 --implementation)。单个 Library 的 API Diff 支持通过未投影的 --json 获取完整 Content,或通过 --envelope 获取完整服务值;其 Share 目前不可投影。如果要了解单个 API 坐标的完整对应结果和诊断信息,请使用 type 或 member ... --match --envelope;有序的匹配端点也不可投影。match Type.MethodA Type.MethodB --package Foo --body 会将 C#/IL 函数体差异加入结构化结果;match Type.Method --similar --package Foo 会为发现候选项按结构相似度排序。 |
| 追踪 API 演进 | diff --history --package [email protected] --type Type --members --at all;省略 --at 可针对完整程序集群进行评估,重复指定 --at 可设置显式检查点,使用 --max-probes 进行自适应二分,添加 --sample-percent P 可执行相对于程序集群的确定性抽样调查,并可选用 --max-probes 限制探测次数,或使用 --major-versions 为每个主版本选择一个代表版本。主版本 API 历史使用第一个稳定版本;如果某个主版本只有预览版,则回退到最新的预览版。Analysis 历史使用每个主版本最新的已纳入版本。 |
| 检查包和生态系统 | package Foo 可检查已知的完全匹配包 ID;使用 package Foo --version 1.2.3 验证确切版本,使用 package Foo --versions -n 1 获取最新列出的版本行,或使用 package Foo@latest --versions 强制重新检查最新版本。使用 -D 发现章节,使用 -S Licenses 列出随包提供的许可证文档,使用 -S "Signals,Audit: Findings" 审核含文本的文件和 SourceLink 映射。package activity --ecosystem aspire 会扫描指定生态系统过去 42 天的确切包集;可添加 --security-only、成对的确切 --from/--through UTC 时间戳或完整 Content --json;使用 --envelope 获取完整服务值。加载 skill private-feeds,了解自定义/需身份验证的源。 |
| 查询包 | package query Foo 会选择最新的符合条件的已列出版本;字面匹配包 ID 前缀时,使用 'Foo.*'。nuspec 许可证的封闭取值为 any、MIT 和 OSMF;将它们与 --where 和 --nuspec-only 配合使用,避免打开存档。使用 explain <facet-path> 检查已发现维度的运算符和关系,然后再用 --where 组合查询。Product 规划器根据 --tfm 生成 library-target;需要读取大量元数据的查询最多纳入五个候选项。最终 Results 会保留有类型的已选库上下文、确切的 Root 重新打开操作,以及完整的 occurrences。-n 和 --rows 用于选择包 Results,而非 occurrences。--envelope 会保留完整的 package-query Content 和诊断信息,但 Package Query Share 目前不可投影。 |
| 创建或盘点 Workspace | workspace --register-ecosystem runtime 会生成可移植数据包,不会获取内容;添加 --share url 可生成激活 URL,或使用 --json 获取数据包 JSON。workspace --packet "$w" 会验证并重新输出数据包,但不会实例化内容。添加 --inventory 可跨所有上下文进行完整的实时盘点;--kind、-n、--rows 和 --count 可缩小其有类型条目的范围。使用已纳入的 --workspace "$w" 上下文搭配常规 package、library、type 和 member 命令来检查对象。package Foo --workspace "$w" 可在派生 Workspace 中复用已纳入的 Package,或添加并激活该 Package。使用 dotnet-inspect -w "$w" 或原始数据包输入来应用:Workspace 会输出盘点结果;已保存的 Package Libraries 会输出其常规层级结构。其他已保存的维度/查询会明确报错。 |
| 编辑可移植的 Workspace | 使用 workspace component list --packet "$w" 获取规范路径。然后使用 workspace package add PACKAGE@VERSION --packet "$w"、workspace package update packages/ID@VERSION/TFM/RID --packet "$w" --version NEW 或 workspace package remove packages/ID@VERSION/TFM/RID --packet "$w"。默认情况下,编辑操作会生成新数据包;添加和更新可按支持情况选择上下文或 TFM,更新还可生成 --json --envelope。使用 workspace packet encode 或 workspace packet decode 转换数据包。 |
| 发现或检查库 | library Foo 或 library path/to.dll 可检查已知源;使用 library query ./bin --where "references=System.Text.Json" 或 library query --platform runtime ... 按 Library 粒度发现内容。使用 -D 发现章节,使用 -D --details 添加结构化格式能力,使用 -S "Library Metrics" 获取整个库的结构化报告,使用 -S "Unsafe Members" 获取独立的不安全代码证据。确切 Library 的 --count 会统计公开 Type 声明;type Type --library path/to.dll --count 会统计 Members。加载 skill metadata,了解原始 ECMA-335 表/堆。 |
| 依赖项和关系 | depends --package Foo@version --tfm net10.0 可获取包关系图和声明证据;添加 -S Dependencies 可仅获取证据,或显式选择 -S Pruning,以便将直接包候选项与已安装的平台清单进行比较。使用 graph calls TYPE MEMBER --root-package Foo@version --root-tfm net10.0 可获取聚焦于外部对象的成员关系图,并自动沿根包依赖项遍历。默认基线会突出显示第三方 Package 边界;使用 --baseline self 或 --baseline nothing 可更改关注范围。使用 graph libraries --library ./Consumer.dll --library ./Provider.dll -S "Direct Use Clusters" 获取精确的成对调用使用集群。使用 depends Type、extensions Type、type Interface -S Implementers 或 type Base -S "Derived Types" 查询类型关系。位置参数 depends Type 支持通过 --json 获取完整 Content,或通过 --envelope 获取完整服务值;资产模式不支持封套。加载 skill relationships,了解范围和语义。 |
成员查找
范围未知时,运行 find Name,检查类型,然后运行 -S "Member Index" 列出重载。使用 Name:N(从 1 开始)或 Name~digest(稳定)进行选择。选中的重载默认使用 Signature。完全限定的 Namespace.Type.Member 无需指定范围。
提示
package和library默认生成简洁、节省 token 且具有高领域价值的内容。输出支持 Markdown、表格、TSV、JSONL 和 JSON;加载dotnet-inspect skill query,了解选择、信封、分享 URL、投影和限制。对于发现的词汇、查询空间或查询方面路径,使用explain <path> .hal --json。HAL 使用_links进行导航,使用_embedded包含数据;获取链接前先检查嵌入数据,使用explain "$href" --json原样跟进输出的 href,并在使用 jq 过滤时保留data_scope。- 当项目引用的包应纳入范围时,添加
--project <csproj|dir|project.assets.json>;它会读取现有的还原资产,因此如果依赖项有变更,请先还原或构建。 workspace --inventory会先报告已提交的 Packages,然后报告未激活的 Exact Library、Package Prefix 和 Ecosystem 注册项;JSON/JSONL 会保留带类型的条目分支。这会盘点现有 Workspace 内容;Find 会在其准入范围内搜索匹配项。普通 Workspace 输出是可移植的定义,而嵌套的workspace component、workspace package、workspace ecosystem和workspace prefix命令负责组件检查和不可变编辑。- 常见 BCL 类型无需指定范围即可解析:
type string、type 'List<T>'。泛型和模式需加引号:member 'Dictionary<TKey,TValue>'、-S "Async*"。未固定版本的包使用最新稳定版;添加--preview以使用预发布 API。
解读固定文本
[Text omitted: required containment]:由于内容涉及文本方面的问题,未共享完整值或文档;这并不意味着存在恶意意图。REDACTED:URL 查询参数或包含凭据的路径段已被移除。<unparsable-url>:由于类似 authority 的值无法解析为 URL 组件,因此未显示原始定位符。<absent>或(absent):请求的包文档不存在;这不属于内容拦截或编辑。\u202E、\U0001F600、\^[等反斜杠形式会以可逆的可视写法保留源文本。它们不是替代内容;显示或持久化之前,不要将其解码为实际的控制字符或格式字符。
评论
支持 Markdown