如何使用ICSharpCode.Decompiler将整个程序集反编译为文本文件?
How to use ICSharpCode.Decompiler to decompile a whole assembly to a text file?
我需要将整个 IL 代码或反编译的源代码获取到一个文本文件中。 ILSpy 反编译引擎 ICSharpCode.Decompiler 可以做到这一点吗?
使用 ILSpy,您可以 select 树视图中的程序集节点,然后使用“文件”>“保存代码”将结果保存到磁盘。 ILSpy 将使用当前 selected 语言来执行此操作,因此它可以反汇编和反编译。反编译为 C# 时,保存对话框将提供用于保存 C# 项目 (.csproj) 的选项,每个 class 都有单独的源代码文件;或整个程序集的单个 C# 文件 (.cs)。
要以编程方式反编译,请使用 ICSharpCode.Decompiler
库(在 NuGet 上可用)。
例如。将整个程序集反编译为字符串:
var decompiler = new CSharpDecompiler(assemblyFileName, new DecompilerSettings());
string code = decompiler.DecompileWholeModuleAsString();
有关反编译器 API 的更高级用法,请参阅 ICSharpCode.Decompiler.Console 项目。
该控制台项目中带有 resolver.AddSearchDirectory(path);
的部分可能是相关的,因为反编译器需要找到引用的程序集。
ICSharpCode.Decompiler 库也有一个反汇编程序 API(有点低级):
string code;
using (var peFileStream = new FileStream(sourceFileName, FileMode.Open, FileAccess.Read))
using (var peFile = new PEFile(sourceFileName, peFileStream))
using (var writer = new StringWriter()) {
var output = new PlainTextOutput(writer);
ReflectionDisassembler rd = new ReflectionDisassembler(output, CancellationToken.None);
rd.DetectControlStructure = false;
rd.WriteAssemblyReferences(peFile.Metadata);
if (metadata.IsAssembly)
rd.WriteAssemblyHeader(peFile);
output.WriteLine();
rd.WriteModuleHeader(peFile);
output.WriteLine();
rd.WriteModuleContents(peFile);
code = writer.ToString();
}
我需要将整个 IL 代码或反编译的源代码获取到一个文本文件中。 ILSpy 反编译引擎 ICSharpCode.Decompiler 可以做到这一点吗?
使用 ILSpy,您可以 select 树视图中的程序集节点,然后使用“文件”>“保存代码”将结果保存到磁盘。 ILSpy 将使用当前 selected 语言来执行此操作,因此它可以反汇编和反编译。反编译为 C# 时,保存对话框将提供用于保存 C# 项目 (.csproj) 的选项,每个 class 都有单独的源代码文件;或整个程序集的单个 C# 文件 (.cs)。
要以编程方式反编译,请使用 ICSharpCode.Decompiler
库(在 NuGet 上可用)。
例如。将整个程序集反编译为字符串:
var decompiler = new CSharpDecompiler(assemblyFileName, new DecompilerSettings());
string code = decompiler.DecompileWholeModuleAsString();
有关反编译器 API 的更高级用法,请参阅 ICSharpCode.Decompiler.Console 项目。
该控制台项目中带有 resolver.AddSearchDirectory(path);
的部分可能是相关的,因为反编译器需要找到引用的程序集。
ICSharpCode.Decompiler 库也有一个反汇编程序 API(有点低级):
string code;
using (var peFileStream = new FileStream(sourceFileName, FileMode.Open, FileAccess.Read))
using (var peFile = new PEFile(sourceFileName, peFileStream))
using (var writer = new StringWriter()) {
var output = new PlainTextOutput(writer);
ReflectionDisassembler rd = new ReflectionDisassembler(output, CancellationToken.None);
rd.DetectControlStructure = false;
rd.WriteAssemblyReferences(peFile.Metadata);
if (metadata.IsAssembly)
rd.WriteAssemblyHeader(peFile);
output.WriteLine();
rd.WriteModuleHeader(peFile);
output.WriteLine();
rd.WriteModuleContents(peFile);
code = writer.ToString();
}