ilspy-decompile
.NET Assembly Decompilation with ILSpy
Use this skill to understand how .NET code works internally by decompiling compiled assemblies.
Quick start
# Decompile an assembly to stdout (no install needed with .NET 10+)
dnx ilspycmd MyLibrary.dll
# Decompile to an output folder
dnx ilspycmd -o output-folder MyLibrary.dll
Common .NET Assembly Locations
NuGet Packages
# Windows
~/.nuget/packages/<package-name>/<version>/lib/<tfm>/
# Example: Newtonsoft.Json
~/.nuget/packages/newtonsoft.json/13.0.3/lib/netstandard2.0/Newtonsoft.Json.dll
# Example: Microsoft.Extensions.DependencyInjection
~/.nuget/packages/microsoft.extensions.dependencyinjection/8.0.0/lib/net8.0/Microsoft.Extensions.DependencyInjection.dll
.NET Runtime Libraries
# Find .NET install location
dotnet --list-runtimes
# Windows typical paths
C:/Program Files/dotnet/shared/Microsoft.NETCore.App/<version>/
C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/<version>/
# Linux/macOS typical paths
/usr/share/dotnet/shared/Microsoft.NETCore.App/<version>/
/usr/share/dotnet/shared/Microsoft.AspNetCore.App/<version>/
# Example: System.Text.Json from runtime
C:/Program Files/dotnet/shared/Microsoft.NETCore.App/8.0.0/System.Text.Json.dll
.NET SDK Reference Assemblies
# Find SDK location
dotnet --list-sdks
# Reference assemblies (design-time facades)
C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/<version>/ref/net8.0/
Project Build Output
# Debug build
./bin/Debug/net8.0/<AssemblyName>.dll
# Published output
./bin/Release/net8.0/publish/<AssemblyName>.dll
Core workflow
- Identify what you want to understand (API, class, method)
- Locate the assembly containing that code
- Use
dnx ilspycmd -l classto find the exact type name - Decompile the specific type with
-t
Commands
Basic Decompilation
# Decompile to stdout
dnx ilspycmd MyLibrary.dll
# Decompile to output directory
dnx ilspycmd -o ./decompiled MyLibrary.dll
# Decompile as compilable project
dnx ilspycmd -p -o ./project MyLibrary.dll
# Decompile with nested namespace folders
dnx ilspycmd -p -o ./project --nested-directories MyLibrary.dll
Targeted Decompilation
# Decompile a specific type
dnx ilspycmd -t Namespace.ClassName MyLibrary.dll
# Decompile with specific C# version
dnx ilspycmd -lv CSharp12_0 MyLibrary.dll
# Decompile with reference path for dependencies
dnx ilspycmd -r ./dependencies MyLibrary.dll
View IL Code
# Show IL code instead of C#
dnx ilspycmd -il MyLibrary.dll
# Show IL for specific type
dnx ilspycmd -il -t Namespace.ClassName MyLibrary.dll
List Types
# List all classes
dnx ilspycmd -l class MyLibrary.dll
# List interfaces
dnx ilspycmd -l interface MyLibrary.dll
# List structs
dnx ilspycmd -l struct MyLibrary.dll
# List enums
dnx ilspycmd -l enum MyLibrary.dll
# List delegates
dnx ilspycmd -l delegate MyLibrary.dll
Options
# Show help
dnx ilspycmd -h
# Disable update check (useful for CI/automation)
dnx ilspycmd --disable-updatecheck MyLibrary.dll
# Remove dead code
dnx ilspycmd --no-dead-code MyLibrary.dll
Example: Understand how JsonSerializer works
# Find System.Text.Json in the runtime
dotnet --list-runtimes
# Microsoft.NETCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
# List classes to find JsonSerializer
dnx ilspycmd -l class "C:/Program Files/dotnet/shared/Microsoft.NETCore.App/8.0.0/System.Text.Json.dll"
# Decompile JsonSerializer
dnx ilspycmd -t System.Text.Json.JsonSerializer "C:/Program Files/dotnet/shared/Microsoft.NETCore.App/8.0.0/System.Text.Json.dll"
Example: Inspect a NuGet package implementation
# Decompile Polly's retry logic
dnx ilspycmd -t Polly.Retry.RetryPolicy ~/.nuget/packages/polly/8.0.0/lib/netstandard2.0/Polly.dll
# Decompile entire package to project for exploration
dnx ilspycmd -p -o ./polly-src ~/.nuget/packages/polly/8.0.0/lib/netstandard2.0/Polly.dll
Example: See how ASP.NET Core handles requests
# Find the ASP.NET Core runtime
# C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.0\
# Decompile the Kestrel server
dnx ilspycmd -l class "C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/8.0.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll"
dnx ilspycmd -t Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer "C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/8.0.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll"
Example: Compare C# and IL
# View C# source
dnx ilspycmd -t MyNamespace.MyClass MyLibrary.dll
# View IL code for same type
dnx ilspycmd -il -t MyNamespace.MyClass MyLibrary.dll
C# Language Versions
Available versions for -lv option:
- CSharp1 through CSharp12_0
- Latest, Preview
More from carsten-j/agent-resources
update-claude-md
Update the project's CLAUDE.md with meta learnings, conventions, gotchas, and significant codebase changes. Use when the user asks to update CLAUDE.md, capture learnings, document project conventions, or reflect recent work in the project guide.
11refactor-pass
Perform a refactor pass focused on simplicity after recent changes. Use when the user asks for a refactor/cleanup pass, simplification, or dead-code removal and expects build to verify behavior.
11pr-review
Review the current Pull Request that has been checked out locally with structured feedback on code quality, issues, testing, and suggestions. Use when you need a comprehensive code review of a PR branch.
8history
Display Claude conversation history in an easy-to-scan format showing recent sessions with dates, projects, and topics. Use when you want to review past conversations or resume a previous session.
1teach
Learning mode - guides the user to complete tasks themselves through Socratic teaching rather than doing it for them. Use when the user wants to learn how to do something instead of having it done for them.
1gwm
Manage git worktrees using the gwm script. Supports creating, listing, removing, and checking status of worktrees. Use when the user says "create git worktree", "new worktree", or needs to work with multiple branches simultaneously via git worktrees.
1