mcpField
D
dotnet-inspect

dotnet-inspect

github.com/richlander开发159510 次安装今天更新
代码仓库

关于 dotnet-inspect

dotnet-inspect 是面向开发者的命令行技能,可查询 .NET API、库、包及依赖证据。它支持发现与深入检查、版本比较,以及创建和编辑可移植的 Workspace 定义。

主要功能

  1. 01发现 API 与包
  2. 02检查类型、成员和库
  3. 03比较 API 与实现变更
  4. 04追踪跨版本的 API 历史
  5. 05创建和编辑可移植 Workspace

适用场景

  1. 01在平台库中查找 .NET API
  2. 02检查包的依赖和许可证文件
  3. 03比较包版本中的破坏性变更
  4. 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
关联某个成员的 Findingsmember 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 目前不可投影。
创建或盘点 Workspaceworkspace --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