csc.exe 和 AL.exe的区别

      多文件程序集比较少见,而且除了使用 csc.exe 之外,有时还需要使用 AL.exe。假设有两个源代码文件 A.cs 和 B.cs,我们有两种生成多文件程序集的方法,这两种方法的主要区别在于程序集清单是存储在某个模块中还是单独存储于主模块中。

先看第一种方法,只使用csc.exe就可以了:

          csc.exe /target:module A.cs

          csc.exe /target:library /addmodule.A.netmodule /out:Hello.dll B.cs

      第一个命令将 A.cs 编译为一个模块文件,A.netmodule,该文件仅包含类型元数据和中间语言,不包含程序集清单,是一种“原始”的模块文件,不能独立存在,必须从属于程序集。第二个命令将 B.cs 编译成模块文件,Hello.dll。这个文件除了包含类型元数据和中间语言之外,还存储了程序集清单,因为成为主模块文件。此时,程序集的名称仍然为 Hello,但文件列表的内容变成了两个:A.netmodule 和 Hello.dll。

再来看第二种方法,需要使用 csc.exe 和 al.exe 两个命令:

          csc /target:module A.cs

          csc /target:module B.cs

          al.exe /target:library /out:Hello.dll A.netmodule B.netmodule

      前两个命令将 A.cs 和 B.cs 编译为两个“原始”的模块文件,A.netmodule 和 B.netmodule。第三个命令使用了AL.exe(Assembly Linker,程序集链接器),该命令能够将 A.netmodule 和 B.netmodule 组合到程序集中。这样,最终会生成 Hello.dll 这个主模块文件,该文件将仅包含程序集清单。在这个程序集清单中,文件列表的内容变成了三个:A.netmodule,B.netmodule 和 Hello.dll。

posted @ 2008-09-02 22:48  啦呀啦  阅读(581)  评论(0)    收藏  举报