IlPad
将 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 - 初始发布