Claude-skill-registry csharp-decompile
Decompile .NET assemblies to inspect types, understand implementations, debug third-party libraries, and view IL code. Use when debugging NuGet dependency behavior, understanding compiled code, investigating runtime issues, or exploring unfamiliar assemblies.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/csharp-decompile" ~/.claude/skills/majiayu000-claude-skill-registry-csharp-decompile && rm -rf "$T"
skills/data/csharp-decompile/SKILL.mdC# Decompilation with ilspycmd
Decompile .NET assemblies to C# source code or IL using
ilspycmd.
Setup
Ensure ilspycmd is installed:
ilspycmd --version || dotnet tool install --global ilspycmd
Workflows
List Types in an Assembly
Discover what's in an assembly before decompiling:
# List all types: classes, interfaces, structs, delegates, enums ilspycmd -l cisde /path/to/assembly.dll
Decompile to a Project
Generate a compilable C# project from an assembly:
ilspycmd --nested-directories -p -o /tmp/decompiled /path/to/assembly.dll
This creates a
.csproj and source files organized by namespace.
Important: this lets Claude code bring its sophisticated code reading and exploration tools to bear.
Decompile a Specific Type
Target a single type by its fully qualified name:
ilspycmd -t MyNamespace.MyClass /path/to/assembly.dll
The output goes to stdout. Use this to quickly inspect a type's implementation.
View IL Code
For low-level analysis, view the intermediate language:
ilspycmd -il -t MyNamespace.MyClass /path/to/assembly.dll # With sequence points (source line mappings) ilspycmd --il-sequence-points -t MyNamespace.MyClass /path/to/assembly.dll
Debug NuGet Dependencies
NuGet packages are at
~/.nuget/packages/<package-name>/<version>/lib/<tfm>/. To inspect:
# Find the DLL find ~/.nuget/packages/sixlabors.imagesharp -name "*.dll" | grep -v ref # List types ilspycmd -l cisde ~/.nuget/packages/sixlabors.imagesharp/3.1.11/lib/net6.0/SixLabors.ImageSharp.dll # Decompile a specific type ilspycmd -t "SixLabors.ImageSharp.Numerics" ~/.nuget/packages/sixlabors.imagesharp/3.1.11/lib/net6.0/SixLabors.ImageSharp.dll
Generate Type Diagrams
Create an interactive HTML visualization of type relationships:
ilspycmd --generate-diagrammer -o /tmp/diagrammer /path/to/assembly.dll # With filtering ilspycmd --generate-diagrammer -o /tmp/diagrammer \ --generate-diagrammer-include "MyNamespace\\..*" \ --generate-diagrammer-exclude "MyNamespace\\.Internal\\..*" \ /path/to/assembly.dll
These are mostly useful for the user. Let the user know that they're available.
Tips
- Add
when the assembly has dependencies that aren't automatically resolved-r /path/to/deps - Use
and--no-dead-code
for cleaner output--no-dead-stores - For tight loops or scripts, add
--disable-updatecheck - The
flag is default; use-lv Latest
etc for older language features-lv CSharp9_0