码迷,mamicode.com
首页 > Windows程序 > 详细

C# 应用程序集

时间:2015-05-07 22:18:17      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

程序集是包含编译好的、面向.NET Framework的代码的逻辑单元。这句话可以理解如下:

       首先,程序集是代码的逻辑单元,是逻辑上的概念。 它不完全等价于编译好的DLL物理文件,

                  但一般我们认为静态专用程序集与编译出的DLL文件或EXE文件是一致的。

       其次,它是被编译好的。它不是项目名称或命名空间,更不是源代码。

       最后,它是是面向.NET Framework的。意味着它虽然被编译了,但仍需要依托于.NET Framework来运行。 

      一个程序集可以是一个包括元数据的DLL或EXE,也可以由多个文件组成,例如资源文件、元数据、DLL和EXE。 

      注意:Win32的DLL(动态链接库)和DotNet中的DLL(程序集文件)的扩展名虽然都是DLL,但是二者内部的数据组织是不一样的,

                 所以千万不要把二者混为一谈。 

程序集的分类: 

       静态程序集:静态程序集包括中间语言元数据(MSIL,类似于Java字节码的东西),以及该程序集的资源(位图、JPEG 文件、资源文件等)。

                             静态程序集存储硬盘文件中。

       动态程序集:动态程序集直接从内存运行并且在执行前不存储到磁盘上,如ASP.NET 2.0中的网站程序运行的时候产生的是动态程序集。 

       专用程序集:专用程序集一般附带在某些软件上,且只为该软件提供专用的类库,这些库包含的代码只能用于该应用程序。

                            一般专用程序集是与应用程序放在同一目录下的,在部署的时候与应用程序一起复制到目标机器上即可。 

      共享程序集:共享程序集是其他应用程序可以使用的公共库,一般是安装到系统GAC中。因为其他软件可以访问共享程序集,

                            所以所有共享程序集必须带有强名称(由发行者签名)。  本地应用程序目录可用于存储专用程序集,

                            所以专用程序集一般不会有版本冲突问题。其他应用程序都不会重写私有的程序集。当然,仍可以使用私有程序集的版本号,

                            这样有助于代码的修改与管理,但它不是.NET所必须的。这种专用程序集是大多数程序员所喜欢的,它可以很好地避免DLL Hell的问题。

                            但这种专用程序集只能部署在应用程序所在的目录之中,而无法像以往的Win32 DLL那样放置在System32目录中供多个应用程序共享,

                            但有 的时候设计人员仍有共享程序集的需求(把程序集部署到GAC目录中),这样一来又带来了我们似乎又看到DELL HELL又在

                            慢慢地逼近 我们,其实DLL共享程序集中根本不可能出现DELL HELL。因为共享程序集并不是简单地把私有程序集复制到GAC所在

                            目录中,开发人员只能使用相关工具把强命名程序集(Strong-name Assembly)放在GAC所在目录中。

                            在GAC中可以允许同名称但是不同版本号的程序集存在,当不同版本的强命名程序集安装在GAC中后,

                            不同的应用程序会根据版本号信息去 调用不同的程序集,这样就不会产生DLL程序集冲突的问题了。



C# 应用程序集

标签:

原文地址:http://blog.csdn.net/ilipan/article/details/45564363

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!