AgentSkillsCN

dotnet-inspect

当您需要检查 .NET 程序集、探索 NuGet 包的 API、跨框架搜索类型、比较 API 版本,或核查包的漏洞时,可使用此技能。当用户询问“X 具有哪些方法?”、“查找类似 Y 的类型”、“比较版本”、“检查漏洞”、“探索这个包”,或进行任何 .NET API 探索任务时,此技能均可派上用场。

SKILL.md
--- frontmatter
name: dotnet-inspect
description: This skill should be used when inspecting .NET assemblies, exploring NuGet package APIs, searching for types across frameworks, comparing API versions, or checking package vulnerabilities. Triggers on "what methods does X have", "find types like Y", "compare versions", "check for vulnerabilities", "explore this package", or any .NET API exploration task.
user-invocable: false

dotnet-inspect

CLI tool for inspecting .NET assemblies and NuGet packages.

Requirements

  • .NET 10+ SDK

Installation

Use dnx to run without global installation (like npx for Node):

bash
dnx dotnet-inspect -y -- <command>

Important:

  • Always use -y to skip the interactive confirmation prompt (which breaks LLM tool use). New package versions also trigger this prompt.
  • Always use -- to separate dnx options from tool arguments. Without it, --help shows dnx help, not dotnet-inspect help.

Quick Reference

bash
dotnet-inspect <package>[@version]           # Package metadata
dotnet-inspect api <type> --package <pkg>    # API from package
dotnet-inspect api --platform <assembly>     # API from installed SDK
dotnet-inspect platform                      # List installed frameworks
dotnet-inspect find <pattern>                # Search types in runtime
dotnet-inspect assembly path/to/file.dll     # Local assembly
dotnet-inspect diff <type> --package         # Version comparison
dotnet-inspect type <type> --package <pkg>   # Type shape with hierarchy

Command Selection Guide

GoalCommand
Find a type by namedotnet-inspect find "*Pattern*"
See what's in a packagedotnet-inspect api --package <pkg>
Get type details with membersdotnet-inspect type <type> --package <pkg>
Check specific method overloadsdotnet-inspect api <type> --package <pkg> -m <method> -v:d
Compare a type between versionsdotnet-inspect diff <type> --package <pkg>@v1..v2
Compare entire packagesUse api -v:q on both versions, compare counts
Check for vulnerabilitiesdotnet-inspect <package>@<version>
See interfaces a type implementsdotnet-inspect api <type> --package <pkg> --interfaces

Common Workflows

Discovery Workflow

When the location of a type is unknown:

bash
# Step 1: Find the type
dotnet-inspect find "JsonSerializer" --framework runtime
# Shows: System.Text.Json.JsonSerializer in System.Text.Json.dll

# Step 2: Get overview with type command
dotnet-inspect type JsonSerializer --platform System.Text.Json

# Step 3: Drill into specific members
dotnet-inspect api JsonSerializer --platform System.Text.Json -m Serialize -v:d

Package Analysis Workflow

bash
# Check package metadata and vulnerabilities
dotnet-inspect System.Text.Json@8.0.4

# List available versions
dotnet-inspect System.Text.Json --versions -n 10

# Audit assemblies for SourceLink/determinism
dotnet-inspect assembly --package System.Text.Json --tfm net8.0 --audit

API Comparison Workflow

The diff command compares a specific type between versions. It requires a valid type name.

bash
# Step 1: Find valid type names in the package first
dotnet-inspect find "*" --package FastEndpoints@7.1.0 -n 20

# Step 2: Diff a specific type between versions
dotnet-inspect diff Config --package FastEndpoints@7.1.0..7.2.0
dotnet-inspect diff JsonSerializer --package System.Text.Json@9.0.0..10.0.2

Important: The diff command fails if the type doesn't exist in either version. Always use find first to discover valid type names.

Full Package Comparison Workflow

To compare entire packages between versions (not just one type):

bash
# Step 1: List all types in each version (run in parallel for efficiency)
dotnet-inspect api --package FastEndpoints@7.1.0 -v:q
dotnet-inspect api --package FastEndpoints@7.2.0 -v:q

The -v:q output shows summary counts at the top:

code
**Types:** 144
**Methods:** 603
**Properties:** 277

Compare these counts to quickly see the scope of changes.

bash
# Step 2: Diff key types that exist in both versions (run in parallel)
dotnet-inspect diff Config --package FastEndpoints@7.1.0..7.2.0
dotnet-inspect diff IEndpoint --package FastEndpoints@7.1.0..7.2.0
dotnet-inspect diff HttpClientExtensions --package FastEndpoints@7.1.0..7.2.0

Identifying added/removed types: Compare the type lists from both -v:q outputs. Types present in v1 but not v2 were removed; types in v2 but not v1 were added.

Diff output format:

code
## API Diff: Config
**7.1.0** → **7.2.0**
**Summary:** +0 added, -2 removed

### Removed
- `IServiceResolver ServiceResolver { get; set; }`

### Added
+ `string NewProperty { get; set; }`

Commands

package

Get package metadata, check vulnerabilities, list versions.

bash
dotnet-inspect System.Text.Json                    # Latest version
dotnet-inspect System.Text.Json@8.0.4 -v:d         # Specific version, detailed
dotnet-inspect System.Text.Json --versions -n 5    # List versions

api

Explore types and members in packages or platform assemblies.

bash
dotnet-inspect api --package System.Text.Json                     # List all types
dotnet-inspect api --package System.Text.Json --filter "*Json*"   # Filter by glob
dotnet-inspect api JsonSerializer --package System.Text.Json      # Single type
dotnet-inspect api JsonSerializer --package System.Text.Json@9.0.0  # Specific version
dotnet-inspect api JsonSerializer --package System.Text.Json -m Serialize  # Single member
dotnet-inspect api JsonSerializer --package System.Text.Json --signatures-only  # Plain output
dotnet-inspect api 'Option<T>' --package System.CommandLine       # Generic types
dotnet-inspect api Command --package System.CommandLine --ctor    # Constructors
dotnet-inspect api JsonSerializer --package Newtonsoft.Json --docs  # With documentation
dotnet-inspect api --platform System.Text.Json                    # Platform assembly
dotnet-inspect api JsonSerializer --platform System.Text.Json --interfaces  # With interfaces

type

Show type shape with hierarchy and members in tree format.

bash
dotnet-inspect type JsonSerializer --package System.Text.Json
dotnet-inspect type "List<T>" --platform System.Collections
dotnet-inspect type JsonSerializer --package System.Text.Json --json

find

Search for types across packages, assemblies, and frameworks.

bash
dotnet-inspect find HttpClient                          # Search runtime (default)
dotnet-inspect find "*Stream*" -n 10                    # Glob pattern, limit results
dotnet-inspect find "*Json*" --package System.Text.Json # Search in package
dotnet-inspect find "*Serializer*" --package System.Text.Json --package Newtonsoft.Json
dotnet-inspect find "*Command*" --project ./MyApp.csproj  # Project dependencies
dotnet-inspect find "*Service*" --bin ./bin/Debug/net8.0  # Built output directory
dotnet-inspect find ILogger --framework aspnetcore      # ASP.NET Core framework
ScopeDescription
(none)Defaults to --framework runtime
--packageNuGet package (name or name@version)
--assemblyLocal assembly file
--platformSpecific platform assembly
--frameworkAll assemblies in framework (runtime, aspnetcore)
--projectProject dependencies via project.assets.json
--binAll DLLs in output directory

diff

Compare a specific type's API surface between versions. Requires a valid type name that exists in both versions.

bash
# Package version comparison
dotnet-inspect diff JsonSerializer --package System.Text.Json@9.0.0..10.0.2
dotnet-inspect diff Config --package FastEndpoints@7.1.0..7.2.0

# Platform version comparison
dotnet-inspect diff JsonSerializer --platform System.Text.Json@8.0.23..10.0.2
dotnet-inspect diff HttpClient --platform System.Net.Http@9.0.0..10.0.0 --framework runtime

Important:

  • The type name must exist in both versions, or the command fails
  • Use find first to discover valid type names: dotnet-inspect find "*" --package pkg@version
  • This command compares one type at a time, not entire packages
  • Some types may cause internal errors (e.g., "Argument_AddingDuplicateWithKey") — skip these and try other types

platform

List installed frameworks and inspect platform assemblies.

bash
dotnet-inspect platform                            # List installed frameworks
dotnet-inspect platform --list-versions            # Installed SDK versions
dotnet-inspect platform --framework runtime        # List runtime assemblies
dotnet-inspect platform --framework aspnetcore     # List ASP.NET Core assemblies

Package vs Platform

Some assemblies exist in both NuGet packages and the installed SDK:

SourceWhen to Use
--packageThird-party libraries, specific versions, packages not in SDK
--platform.NET runtime/SDK assemblies, comparing SDK versions, no network needed
bash
# From NuGet package (downloads if needed)
dotnet-inspect api JsonSerializer --package System.Text.Json@9.0.0

# From installed SDK (no download)
dotnet-inspect api JsonSerializer --platform System.Text.Json

Output Options

VerbosityOutput
-v:qTitle + compact line
-v:m+ description (default)
-v:n+ Metadata table
-v:d+ Full member signatures, Statistics, Dependencies
FormatDescription
--jsonFull JSON output
--json --compactMinified JSON, nulls omitted
--signatures-onlyPlain method signatures (api command)

Section filtering (for verbose output):

bash
dotnet-inspect package --discover                  # List sections with numbers
dotnet-inspect System.Text.Json -v:d -x:3,4        # Exclude sections 3 and 4
dotnet-inspect System.Text.Json -v:d -s:1,2        # Include only sections 1 and 2

Key Options

OptionDescription
--tfm net8.0Select target framework
-m NameFilter to member
--filter "Pattern*"Glob filter for types
--ctorConstructor details
--docsFetch XML documentation
--allInclude hidden/obsolete
--unsafeFilter to pointer methods
--auditSourceLink/determinism check
--depsShow runtime dependencies
--interfacesShow implemented interfaces

Generic Type Syntax

Use C# generic syntax - the tool automatically converts to metadata format:

  • "List<T>"List\1`
  • "Dictionary<TKey, TValue>"Dictionary\2`

Quote the type name to prevent shell interpretation.

Common Assembly Names

TypePlatform Assembly
List, Dictionary, QueueSystem.Collections
String, Int32, Object, SpanSystem.Runtime
JsonSerializer, JsonDocumentSystem.Text.Json
HttpClientSystem.Net.Http
Regex, MatchSystem.Text.RegularExpressions
Task, AsyncSystem.Threading.Tasks
File, Stream, PathSystem.IO

Tips

  • Glob patterns must be quoted: "*Stream*" (prevents shell expansion)
  • Member filter (-m) is case-insensitive
  • Uses NuGet cache; --verbose shows cache activity
  • For full overload details, use -v:d with -m filter
  • Run independent commands in parallel for efficiency (e.g., api -v:q for both versions, multiple diff commands)
  • When comparing packages, look at Types/Methods/Properties counts first to gauge scope of changes