用途
ilspy-decompile 用于通过反编译已编译的 .NET 程序集来理解 .NET 代码的内部实现。当你想要查看某个 .NET API 内部如何工作、检查 NuGet 包中的实现细节时,可以使用该技能。
前置条件
需要安装 .NET SDK。ILSpy 命令行工具可通过以下任一方式获得:
dnx ilspycmd(如果你的 SDK 或运行时中可用)dotnet tool install --global ilspycmd
两种形式在下方均有展示,请使用在你的环境中可用的那一种。
注意:ILSpyCmd 的选项可能因版本而略有差异。请始终使用 ilspycmd -h 验证支持的标志。
快速开始
反编译程序集到标准输出:
ilspycmd MyLibrary.dll
或:
dnx ilspycmd MyLibrary.dll
反编译到输出文件夹:
ilspycmd -o output-folder MyLibrary.dll
常见 .NET 程序集位置
NuGet 包:
~/.nuget/packages/<package-name>/<version>/lib/<tfm>/
.NET 运行时库:
dotnet --list-runtimes
.NET SDK 引用程序集:
dotnet --list-sdks
引用程序集不包含实现。
项目构建输出:
./bin/Debug/net8.0/<AssemblyName>.dll
./bin/Release/net8.0/publish/<AssemblyName>.dll
核心工作流
- 确定你想理解的内容
- 定位程序集
- 列出类型
- 反编译目标
命令
基本反编译:
ilspycmd MyLibrary.dll
ilspycmd -o ./decompiled MyLibrary.dll
ilspycmd -p -o ./project MyLibrary.dll
定向反编译:
ilspycmd -t Namespace.ClassName MyLibrary.dll
ilspycmd -lv CSharp12_0 MyLibrary.dll
查看 IL 代码:
ilspycmd -il MyLibrary.dll
关于现代 .NET 构建的说明
- ReadyToRun 映像可能降低可读性
- 裁剪或 AOT 构建可能省略代码
- 优先使用非裁剪构建
法律说明
反编译程序集可能受到许可证限制。