.NET CIL系列第三篇:正反向工程2010-11-14 博客园 xuefly介绍了CIL的基础知识之后,现在来研究CIL的实际使用,我们从正反向工程开始讨论。正反向工程大家已经知道可以使用ildasm.exe来查看由C#编译器生成的CIL代码(参见.NET CIL系列第一篇:CIL介绍和入门),不过也许不知道ildasm.exe还允许将加载到ildasm.exe的程序集中的CIL都导出到一个外部文件中。一旦有了CIL代码,就可以使用CIL编译器ilasm.exe任意编辑或重新编译代码。说明:reflector.exe可以用于查看某个程序集的CIL代码,也可以把CIL代码翻译为接近的C#代码。然而如果程序集包含的CIL结构没有等价的C#实现(C#和VB等只各自实现了CIL所有特性集的子集),我们只能使用ildasm.exe。这个技术叫做正反向工程(round-trip-engineering),在以下这些情况下它将很有用处。n 需要修改一个没有源代码的程序集n 正在使用的.NET语言编译器不够完美,产生了一些效率不足的CIL代码,而用户希望修改。n 用户在构建可与COM互操作的程序集并且希望补充那些在转换过程中丢失的IDL特性,例如COM的[helpstring]特性。为了解释正反向工程的过程,我们使用文本编辑器来创建一个新的C#代码文件(HelloProgram.cs),并且定义下面的类(也可以使用Visual Studio 2008,但要记得删除AssemblyInfo.cs这个文件来减少生成的CIL代码数量):// 简单的C#控制台程序
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello CIL code!");
Console.ReadLine();
}
}