C#学习笔记(二十六)程序集(assembly)

       程序集(assembly)

       .NET程序的库和可执行文件称为程序集。程序集是包含编译好、面向.NET Framework的代码的逻辑单元。
       程序集是完全自描述的,它是一个逻辑单元而非物理单元,即它可以存在多个文件中。如果程序集存储在多个文件中,则会包含入口点的主文件,主文件描述了程序集中的其他文件。
       可执行代码和库代码使用相同的程序集结构。唯一的区别是可执行的程序集包含一个主程序入口点,而库程序集不包含。
       程序集的一个重要特征是它包含的元数据描述了对应代码中定义的类型和方法。程序集也包含了描述程序集本身的程序集元数据,这个程序集元数据包含在称为“清单(manifest)”的区域中,
可以检查程序集的版本及其完整性。
       由于程序集包含了程序的元数据,因此调用程序集中的代码的应用程序或者其他程序集不需要引用注册表或其他数据源就能确定如何使用程序集。
       1.私有程序集
       私有程序集一般附带在某个软件上,且只能用于该软件。附带私有程序集的常见情况是,以可执行文件或类库的方式提供应用程序,类库的代码只能用于该应用程序。
       系统可以保证私有程序集不被其他软件使用,因为应用程序只能加载位于主执行文件所在文件夹或者子文件夹中的私有程序集。
       因为私有程序集是完全自包含的,所以部署程序的过程很简单。只需要把相应的文件放在文件系统的对应文件夹即可(不需要注册表项),这个过程称为“0影响安装”。
       2.共享程序集
       共享程序集是其他程序集可以使用共用库。因为其他软件可以访问共享程序集,所以需要采取一定保护措施防止风险。
       名称冲突,指另一个共公司的共享程序集实现的类型与自己的共享程序集中的类型同名。
       程序集被同一个程序集的不同版本覆盖,新板块可能与某些已有应用程序代码不兼容。
       解决风险的方法是把共享程序集放在文件系统的特定子目录树中,称为全局程序集缓存(Global Assembly Cache,GAC)。与私有程序集不同,不能讲共享程序集复制到对应的文件夹中,二十专门安装到缓存中。有许多.NET工具可以完成这个过程,并要求对程序集进行检查,在程序集缓存中设置一个小的文件夹层次结构,确保程序集完整性。
       为了避免名称冲突,应根据私钥加密法为共享程序集指定一个名称。该名称称为强名。,并保证其唯一性,它必须由要引用共享程序集的应用程序来引用。
       解决版本覆盖的问题可以通过程序集清单中指定版本信息来解决。

发布了35 篇原创文章 · 获赞 67 · 访问量 8515

猜你喜欢

转载自blog.csdn.net/EngraveSmile/article/details/103417628