65.9K
CodeProject 正在变化。 阅读更多。
Home

IlPad

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.68/5 (12投票s)

2012 年 9 月 22 日

CPOL

2分钟阅读

viewsIcon

31586

downloadIcon

841

将 C# 代码编译成 MSIL 代码的程序。

引言

不久前,我试图提高一个程序的效率,为此,我需要查看我正在处理的程序集的 MSIL。但每次都必须构建程序,然后切换到 Microsoft Ildasm 来查看反汇编代码,这很快就变得非常乏味。我尝试在网上寻找一些能够让我同时查看 C# 代码和 IL 代码的工具,但没有找到。因此,IlPad 诞生了。

它的功能

IlPad 打开时有 4 个面板。顶部面板是一个文本框,您可以在其中输入 C# 代码。它可以是一个完整的程序,也可以只是一个类的一部分。右侧是另一个面板,显示了您当前引用的程序集。有一个按钮可以打开,如果您需要,可以在其中引用更多的程序集。C# 编辑器下方有一个按钮。单击此按钮将编译您的代码片段,生成的 IL 代码将显示在其下方的另一个文本框中。如果您的 C# 代码中有任何错误,这些错误将输出到 IlPad 底部的列表框中。列表框将为您提供错误的描述以及错误发生的行号。IlPad 就是这么容易使用!

除此之外,我还包含了两个示例代码片段。通过单击窗口顶部的两个代码片段按钮中的任何一个,文本框将自动填充代码片段。这两个代码片段都可以在无需引用任何其他程序集的情况下运行。

IlPad 的工作原理

IlPad 的工作原理是利用 CSharpCodeProvider 类。这个类可以让您将 C# 代码动态编译成内存中的程序集或输出到文件的程序集。以下是 IlPad 中执行编译的代码片段

            var options = new Dictionary<string, string> {{"CompilerVersion", "v4.0"}};
            var provider = new CSharpCodeProvider(options);
            var parms = new CompilerParameters
                {
                    CompilerOptions = @"/lib:C:\Windows\assembly\GAC /target:library",
                    GenerateExecutable = true,
                    GenerateInMemory = false
                };
            parms.ReferencedAssemblies.Add("System.dll");
            foreach (string item in lbReferences.Items)
            {
                parms.ReferencedAssemblies.Add(item + ".dll");
            }
            string outFile = Path.GetTempFileName();
            string ilOutFile = Path.GetTempFileName();
            string ildasm = Path.GetTempFileName() + ".exe";
            parms.OutputAssembly = outFile;
            CompilerResults res = provider.CompileAssemblyFromSource(parms, txtInputProgram.Text); 

IlPad 针对 .NET 4.0。如果需要,IlPad 也可以在 .NET 3.5 中运行。IlPad 创建一个临时文件来存储编译后的程序集。成功创建程序集后,IlPad 运行 IlDasm。IlDasm 是 Microsoft 创建的反汇编程序,可以将 .NET 程序集反汇编为 MSIL 代码。

待办事项

当我有更多时间时,我想做一些事情来改进 IlPad。这是一个简短的待办事项列表

  • 添加 VB.NET 支持
  • 改进“添加引用”对话框
  • 语法高亮(源代码和 IL 代码)
  • 自动代码格式化
  • 可能添加 F# 支持
  • 创建一个代码片段库并添加更多代码片段
  • 能够在代码片段库中创建和存储您自己的代码片段

当然,如果任何人有任何建议或想看到添加的东西,我很乐意听到任何想法!

历史

  • 1.0 - 初始发布
IlPad - CodeProject - 代码之家
© . All rights reserved.