name: ilspy-decompile description: 通过反编译程序集来理解.NET代码的实现细节。当您想了解.NET API内部工作原理、检查NuGet包源代码、查看框架实现或理解已编译的.NET二进制文件时使用。 allowed-tools: Bash(dnx:*)
使用ILSpy进行.NET程序集反编译
使用此技能通过反编译已编译的程序集来理解.NET代码的内部工作原理。
先决条件
- 已安装.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构建可能会省略代码
- 建议使用非裁剪构建
法律声明
反编译程序集可能受许可证限制。