0

ILSpy は cecil を独自のライブラリと共に使用してこれを実現しています。 ?

編集:私は今、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 に答える