用途:当 API 层面的视图过于高层时,用该技能直接查看程序集真实的 ECMA-335 表、句柄、标志位或堆值。该元数据视角只检查单个程序集映像,且从不加载被检查的程序集。
用法入口:dnx dotnet-inspect -y -- <command>
先发现再读取:元数据表是不限范围且需显式指定的,不会因详细度或基础类别自动渲染。结构发现会列出已写入的元数据族,而不运行其生产者;加上 --effective 可识别该映像中确有数据的表与堆。示例:dnx dotnet-inspect -y -- library MyLib.dll -D @Metadata;后接 --effective;或用 -S @Metadata --count。也可指定单个区段如 -D "Metadata: TypeDef" --effective。Metadata: Image 报告映像级事实;Metadata: TypeDef、Metadata: MethodDef、Metadata: MemberRef 等表区段会解码句柄、范围、堆值与标志,而非直接输出原始整数。
查询单表:# 列是真实元数据行 id,--rows 因此按显示的、从 1 开始的元数据位置寻址表格行,而非当前页。范围为闭区间,100..199 表示 100 行。示例:dnx dotnet-inspect -y -- library MyLib.dll -S "Metadata: MethodDef" --rows 100..199 --tsv;也可用 --columns "Name,Namespace,ResolutionScope" --jsonl。跟随 token 时,表索引可作为输入别名,例如 -S "Metadata: 0x02" 表示 TypeDef 表;而完整 token 如 0x02000015 指向行而非表,会被 -S 拒绝。
检查堆:堆区段为 Metadata: #Strings、#Blob、#GUID、#US。使用 library coordinate 定位单个精确坐标,例如 -S "Metadata: #Strings" --rows 20,或 dnx dotnet-inspect -y -- library coordinate "#Strings:0x1a4" --library MyLib.dll。堆地址默认为十进制,加 0x 前缀表示十六进制。字符串与 blob 列表包含被投影表行引用的不同值,并不声称完整枚举堆;每个列表会报告其覆盖范围。
限制:当为包选择 @Metadata 而该包解析出多个程序集时会产生歧义并失败;需用 library 选定单个 DLL,或在包只有一个无歧义的库时使用 package Foo --library only。