0

ILSpy 正在使用 cecil 及其自己的库来完成此任务,我听说 .NETReflector 正在使用他自己的私有算法从 MSIL 生成更高级别的 c#、f#、vb 代码,以及如何在没有依赖关系的情况下执行此操作的任何方法/参考?

编辑:我现在对 ILSpy 和 cecil 作为骨干感到满意

解决方案

string GetSourceCode(string path) {
        var asmDef = AssemblyDefinition.ReadAssembly(path);
        var strBuilder = new StringBuilder();
        foreach (var type in asmDef.MainModule.Types) {
            if (!type.IsCompilerGenerated()) {
                AstBuilder builder = new AstBuilder(new DecompilerContext(asmDef.MainModule));
                builder.AddType(type);
                var output = new StringWriter();
                builder.GenerateCode(new PlainTextOutput(output));
                strBuilder.Append(output.ToString());
                output.Dispose();
            }
        }
        return strBuilder.ToString();
    }
4

1 回答 1

1

嗯,首先你要明白的是,编译后的 dll 或 exe 文件中没有纯源代码之类的东西。编译后 C# 代码被编译成CIL。Mono.Cecil 将 dll 或 exe 文件读取为字节数组并将其解码为 CIL 指令。.Net 平台在运行您的程序时也是如此。ILSpy 所做的是它试图根据解码的指令猜测源代码的外观。.NETReflector 做同样的事情,但不使用 Cecil

于 2015-08-14T12:11:33.800 回答