C#/.NET程序集详解

  • 内容
  • 评论
  • 相关

在写完代码之后进行生成(build)时,CLR 将 .NET 应用程序打包为由模块(module)组成的程序集(assembly)。

一个程序集由一或多个托管模块组成,程序代码被编译为 IL 代码,存在于托管模块之中。

程序集是一个可以寄宿于 CLR 中的、拥有版本号的、自解释、可配置的二进制文件,程序集的扩展名为 exe 或 dll。

程序集中的代码可以被其他程序集中的 C# 代码调用,例如几乎所有的 C# 代码都会用到 mscorlib.dll 这个程序集中的对象。

程序集是自解释的,因为它记录了它需要访问的其他程序集(在清单中)。

另外,元数据描述了程序集内部使用的类型的所有信息,包括类型的成员和构造函数等。

程序集可以私有或共享的方式配置,如果以共享方式进行配置,则同一台机器的所有应用程序都可以使用它。

程序集也可以手动进行生成,这需要选择对应语言的编译器。

C# 的编译器是csc.exe。可以通过 /t 参数指定编译目标,最常见的几个为:

  • /t:library:目标为一个 dll 文件(需要指定托管模块)。
  • /t:exe:目标为一个可执行 exe 文件,必须指定入口点。
  • /t:module:目标为一个托管模块。

其中,前两个目标的结果文件都是程序集,而最后一个目标的结果文件是托管模块。

反向工程——使用 ILSpy 观察 IL

ILSpy 是一个免费的、开源的反编译工具,可以将程序集反编译为 C# 代码。

ILSpy 的下载地址为:http://ilspy.net,和 .NET 自带的 ildasm 相比,它有一个很大的优点,就是在打开文件之后,其他的程序仍然可以修改它。

使用 ildasm 打开一个工程的 .dll 之后,你在 Visual Studio 就无法再生成它了(Visual Studio 会提示有其他程序正在使用),但 ILSpy 还不支持 C# 的较新版本的反编译(不过,它正在与时俱进)。

我们平常将 C# 代码通过编译器转换为 IL 的动作叫做正向工程;而反过来,将程序集文件内部的 IL 和元数据重新组合并转换为 C# 代码的动作就叫反向工程(reverse engineering)。

ILSpy 还允许在反向工程的同时,对某些语法关键字不进行反编译,这将会生成一个较长的 C# 代码,但可以让你更加清楚地了解编译器幕后所做的工作(本书默认全部选择), 如下图所示。

ILSpy的选项

本文标题:C#/.NET程序集详解

本文地址:https://www.hosteonscn.com/4990.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注