7 added, 5 removed. Audit A to A.
---
name: dotnet-inspect-metadata
version: 0.1.0
description: Query raw ECMA-335 assembly metadata — discover table and heap sections, inspect decoded rows and handles, address table or heap coordinates, and project bounded machine-readable results.
---
# dotnet-inspect: raw assembly metadata
Use this skill when API views are too high-level and you need the assembly's
actual ECMA-335 tables, handles, flags, or heap values. The metadata lens
inspects one assembly image and never loads the inspected assembly.
```bash
dnx dotnet-inspect -y -- <command>
```
## Discover before reading
Metadata tables are unbounded and explicit-only: no verbosity or base category
- renders them automatically. Discover the tables present in the image, then
- count or select one:
+ renders them automatically. Structural discovery lists the authored metadata
+ family without running its producers; add `--effective` to identify the tables
+ and heaps that have data for this image:
```bash
dnx dotnet-inspect -y -- library MyLib.dll -D @Metadata
+ dnx dotnet-inspect -y -- library MyLib.dll -D @Metadata --effective
dnx dotnet-inspect -y -- library MyLib.dll -S @Metadata --count
- dnx dotnet-inspect -y -- library MyLib.dll -D "Metadata: TypeDef"
+ dnx dotnet-inspect -y -- library MyLib.dll -D "Metadata: TypeDef" --effective
```
`Metadata: Image` reports image-level facts. Table sections such as
`Metadata: TypeDef`, `Metadata: MethodDef`, and `Metadata: MemberRef` decode
handles, ranges, heap values, and flags instead of dumping raw integers.
## Query one table
The `#` column is the real metadata row id. `--rows` therefore addresses table
- rows by displayed metadata position, including ranges, rather than by the
- current page:
+ rows by displayed, 1-based metadata position rather than by the current page.
+ Ranges are inclusive, so `100..199` selects 100 rows:
```bash
dnx dotnet-inspect -y -- library MyLib.dll \
-S "Metadata: MethodDef" --rows 100..199 --tsv
dnx dotnet-inspect -y -- library MyLib.dll \
-S "Metadata: TypeRef" --columns "Name,Namespace,ResolutionScope" --jsonl
```
Table indices are accepted as input aliases when following a token:
```bash
dnx dotnet-inspect -y -- library MyLib.dll -S "Metadata: 0x02"
```
That is the `TypeDef` table. A full token such as `0x02000015` addresses a row,
not a table, and is rejected by `-S`.
## Inspect heaps
The heap sections are `Metadata: #Strings`, `Metadata: #Blob`,
`Metadata: #GUID`, and `Metadata: #US`. Use `--heap` for one exact coordinate:
```bash
dnx dotnet-inspect -y -- library MyLib.dll \
-S "Metadata: #Strings" --rows 20
dnx dotnet-inspect -y -- library MyLib.dll --heap "#Strings:0x1a4"
```
Heap addresses are decimal unless prefixed with `0x`. String and blob listings
contain distinct values referenced by projected table rows, not a claim of
complete heap enumeration; each listing reports its coverage.
Selecting `@Metadata` for a package that resolves to several assemblies is
ambiguous and fails. Choose one DLL with `library`, or use
`package Foo --library` only when the package has one unambiguous library.