日期:2014-05-17  浏览次数:20974 次

关于.net框架版本的疑难问题,高手也未必懂
本帖最后由 mlxwl2013 于 2013-09-27 14:25:37 编辑
一个C#写的类库应用程序dll。怎样能识别出这个dll是基于.net framework 2.0、3.0还是3.5版的?

我们知道辨别出dll是基于2.0还是4.0这一点都不难,因为它们是基于2个不同的CLR(公共语言运行时)的。但.net framework 2.0、3.0、3.5这三个都是基于CLR 2.0版的,dll文件内部保存有什么特征信息吗?怎么分辨?

------解决方案--------------------
引用
元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 或存储在内存中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中。在模块或程序集中定义和引用的每个类型和成员都将在元数据中进行说明。当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。
元数据以非特定语言的方式描述在代码中定义的每一类型和成员。元数据存储以下信息:
程序集的说明。
标识(名称、版本、区域性、公钥)。
导出的类型。
该程序集所依赖的其他程序集。
运行所需的安全权限。
类型的说明。
名称、可见性、基类和实现的接口。
成员(方法、字段、属性、事件、嵌套的类型)。
属性。
修饰类型和成员的其他说明性元素。


你所说的数据都保存在元数据中。
------解决方案--------------------
虽然CLR版本一样,但依赖的程序集会不一样。比如,
3.5一般引用System.Core.dll,该dll在3.0版本中没有;
3.0可以引用System.ServiceModel.dll,该dll用来支持WCF,在2.0版本中没有。

如果开发时选择3.5,但没有用到3.0或3.5的dll,那你可以把它看成适用2.0版。。

------解决方案--------------------