Welcome

首页 / 软件开发 / .NET编程技术 / .NET CIL系列第三篇:正反向工程

.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();

}

}