Assembly学习心得

时间:2010-03-04 19:13:01  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:br />   分为两部分: 首先是一些必须了解的概念; 然后是一个完整的例子来逐一说明    这些概念;          第一部分(概念)    托管模块(Managed Module)    托管模块是一个需要CLR才能执行的标准Windows可移植可执行(portable executable,简称PE)文件。 &nbs...
  正文:说明:
   最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,
   所以我准备记下我的学习心得,已备参考。
   各位都是大虾了,如果有哪些错误或者不完整的地方,还请不吝指出。多谢了。
   分为两部分: 首先是一些必须了解的概念; 然后是一个完整的例子来逐一说明
   这些概念;
  
  
   第一部分(概念)
   托管模块(Managed Module)
   托管模块是一个需要CLR才能执行的标准Windows可移植可执行(portable executable,简称PE)文件。
  
   元数据(Metadata)
   简单的讲,元数据就是一个数据表的集合,在这些表中,其中一些用于
   描述托管模块中所定义的内容(比如所定义的类型和它们的成员),另外还有一些
   用于描述托管模块中所引用的内容(比如被引用的类型和它们的成员)。
   URL: ms-help://MS.MSDN
   QTR.2004APR.1033/cpguide/html/cpconmetadataoverview.htm
  
   程序集清单(Assembly Manifest)
   程序集清单是另外一些元数据表的集合。这些表描述了组成程序集的文件,
   程序集所有文件中实现的公有导出类型,以及一些程序集相关的资源文件或数据文件。
   ms-help://
   MS.MSDNQTR.2004APR.1033/cpguide/html/cpconAssemblyManifest.htm
  
   1.程序集(Assembly)的概念:
   首先:程序集是一个或多个托管模块,以及一些资源文件的逻辑组合。因为它是一个逻辑上的组合,所以程序集的逻辑表示和物理表示可以相互分离。如何将代码和资源划分到不同的文件中完全取决于我们。例如,我们可以将一些很少使用的类型或资源放在一个单独的Assembly Module中,然后根据需要(比如第一次用到的时候),从web上下载它们。如果没有用到,它们将不会被下载。这样既节省磁盘空间,也减少了安装时间。程序集允许我们将文件的部署分解开来,同时又将所有的文件看作一个单独的集合。
   其次:因为CLR是直接和程序集打交道的,所以程序集也是组件复用,以及实施安全策略和版本策略的最小单元(安全策略,版本信息等都只能是加在程序集上)。
  
   注意:程序集是一个逻辑组合,它可以包含很多个文件。大多数程序集(比如使用Visual Studio.NET创建的那些)一般都是单文件程序集,也就是只有一个.exe或者.dll文件(目前.NET的程序集只有这两种格式)。在这种情况下,程序集清单(manifest)直接嵌入到单文件程序集中。但是,你也可以用“程序集生成工具”(Al.exe)来创建多文件程序集。也可以只创建一个只包含清单的程序集。
  
   2.强命名程序集(Strong Name Assembly)的概念
   因为不同的公司可能会开发出有相同名字的程序集来,如果这些程序集都被复制到同一 个相同的目录下,最后一个安装的程序集将会代替前面的程序集。这就是著名的Windows “DLL Hell”出现的原因。
  
   很明显,简单的用文件名来区分程序集是不够的,CLR需要支持某种机制来唯一的标识一个程序集。这就是所谓的强命名程序集。
  
   一个强命名程序集包含四个唯一标志程序集的特性:文件名(没有扩展名),版本号,语言文化信息(如果有的话),公有秘钥。
  
   这些信息存储在程序集的清单(manifest)中。清单包含了程序集的元数据,并嵌入在程序集的某个文件中。
  
   下面的字符串标识了四个不同的程序集文件:
  
   “MyType, Version=1.0.1.0,
   Culture=neutral, PublicKeyToken=bf5779af662fc055”
  
   “MyType, Version=1.0.1.0,
   Culture=en-us, PublicKeyToken=bf5779af662fc055”
  
   “MyType, Version=1.0.2.0,
   Culture=neturl, PublicKeyToken=bf5779af662fc055”
  
   “MyType, Version=1.0.2.0,
   Culture=neutral, PublicKeyToken=dbe4120289f9fd8a”
  
   如果一个公司想唯一的标识它的程序集,那么它必须首先获取一个公钥/私钥对,然后将共有秘钥和程序集相关联。不存在两个两个公司有同样的公钥/私钥对的情况,正是这种区分使得我们可以创建有着相同名称,版本和语言文化信息的程序集,而不引起任何冲突。

"Assembly学习心得"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13054.html

 1/7    1 2 3 4 5 6 下一页 尾页


关键字:

关于《Assembly学习心得》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td