关于 ilspy-decompile
ilspy-decompile 是使用 ILSpy 检查已编译 .NET 程序集的技能。它指导开发者列出类型、将程序集或指定类型反编译为 C#,以及查看 IL 以分析代码。
主要功能
- 01将程序集反编译为 C#
- 02列出类、接口和结构体
- 03检查指定类型
- 04查看 IL 而非 C#
- 05导出可编译项目
适用场景
- 01调查 NuGet 包的实现
- 02追踪 .NET 运行时库的行为
- 03比较反编译后的 C# 与 IL
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ davidfowl/ dotnet-skillz --skill ilspy-decompile安装后在 Claude Code 中输入/ilspy-decompile确认已加载。
详细介绍
使用 ILSpy 反编译 .NET 程序集
使用此技能,通过反编译已编译的程序集来了解 .NET 代码的内部工作原理。
快速开始
# 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
常见的 .NET 程序集位置
NuGet 包
# 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 运行时库
# 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 参考程序集
# Find SDK location
dotnet --list-sdks
# Reference assemblies (design-time facades)
C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/<version>/ref/net8.0/
项目构建输出
# Debug build
./bin/Debug/net8.0/<AssemblyName>.dll
# Published output
./bin/Release/net8.0/publish/<AssemblyName>.dll
核心工作流程
- 确定要了解的内容(API、类、方法)
- 找到包含该代码的程序集
- 使用
dnx ilspycmd -l class查找确切的类型名称 - 使用
-t反编译指定类型
命令
基本反编译
# 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
针对性反编译
# 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
查看 IL 代码
# 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 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
选项
# 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
示例:了解 JsonSerializer 的工作原理
# 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"
示例:检查 NuGet 包的实现
# 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
示例:查看 ASP.NET Core 如何处理请求
# 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"
示例:比较 C# 和 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# 语言版本
-lv 选项可用的版本:
- CSharp1 至 CSharp12_0
- Latest、Preview
评论
支持 Markdown