3.7 私有部署强命名程序集
2011-12-06 10:40
246 查看
在GAC中安装程序集具有几个方面的优势。GAC使程序集能被多个应用程序共享,从而减少了总体的物理内存占用。除此之外,很容易将程序集的一个新版本部署到GAC中,并让所有应用程序都通过一个发布者策略(本章稍后讲述)来使用这个新版本。GAC还实现了对程序集的多个版本的并行管理。然而,GAC通过会受到严密保护,只有管理员才能在其中安装程序集。此外,一旦向GAC中安装,就会违反“简单复制式部署”这一宗旨。
虽然强命名程序集能安装到GAC中,但这一点绝非强求。事实上,只有在程序集要由多个应用程序共享的时候,才应该将程序集部署到GAC中。如果程序集不需要共享,就应该以私有方式部署它。私有部署维护了“简单的复制式部署”这一宗旨,而且能更好地隔离应用程序及其程序集。另外,不要将GAC想象成一个新的C:\Windows\System32垃圾堆积场。这是因为新版本的程序集不会相互覆盖,它们是并行安装的,每个安装都会消耗磁盘空间。
强命名程序集除了部署到GAC,或者以私有方式部署之外,还可部署到只有少数应用程序才知道的某个目录。例如,假定要生成3个应用程序,所有引用程序都共享一个强命名程序集。安装时可以创建3个目录,每个目录都放一个应用程序。除此之外,在创建第4个目录,专门用于存储想要共享的程序集。将每个应用程序安装到它的目录时,都同时安装一个XML配置文件,并用共享程序集的codeBase原书指出共享程序集的路径。这样在运行时,CLR就知道跑去那里查找共享程序集。但要注意,这个技术很少使用,也不太推荐使用,因为没有任何一个应用程序能决定在什么时候卸载程序集的文件。
注意:配置文件的codeBase元素实际标记了一个URL。这个URL可引用用户机器上的任何目录,也可引用一个Web地址。如果引用的是Web地址,CLR会自动下载文件,并把它存储到用户的下载缓存中(%UserProfile%\Local Settings\Application Data\Assembly下的一个子目录)。将来进行引用时,CLR会将已下载的文件的时间戳与指定URL处的文件的时间戳进行对比。如果URL处的文件具有较新的时间戳,CLR会下载新版本文件并加载它。否则,CLR会加载现有的文件,不再重复下载(从而增强性能)。本章稍后会展示包含codeBase元素的一个示例配置文件。
虽然强命名程序集能安装到GAC中,但这一点绝非强求。事实上,只有在程序集要由多个应用程序共享的时候,才应该将程序集部署到GAC中。如果程序集不需要共享,就应该以私有方式部署它。私有部署维护了“简单的复制式部署”这一宗旨,而且能更好地隔离应用程序及其程序集。另外,不要将GAC想象成一个新的C:\Windows\System32垃圾堆积场。这是因为新版本的程序集不会相互覆盖,它们是并行安装的,每个安装都会消耗磁盘空间。
强命名程序集除了部署到GAC,或者以私有方式部署之外,还可部署到只有少数应用程序才知道的某个目录。例如,假定要生成3个应用程序,所有引用程序都共享一个强命名程序集。安装时可以创建3个目录,每个目录都放一个应用程序。除此之外,在创建第4个目录,专门用于存储想要共享的程序集。将每个应用程序安装到它的目录时,都同时安装一个XML配置文件,并用共享程序集的codeBase原书指出共享程序集的路径。这样在运行时,CLR就知道跑去那里查找共享程序集。但要注意,这个技术很少使用,也不太推荐使用,因为没有任何一个应用程序能决定在什么时候卸载程序集的文件。
注意:配置文件的codeBase元素实际标记了一个URL。这个URL可引用用户机器上的任何目录,也可引用一个Web地址。如果引用的是Web地址,CLR会自动下载文件,并把它存储到用户的下载缓存中(%UserProfile%\Local Settings\Application Data\Assembly下的一个子目录)。将来进行引用时,CLR会将已下载的文件的时间戳与指定URL处的文件的时间戳进行对比。如果URL处的文件具有较新的时间戳,CLR会下载新版本文件并加载它。否则,CLR会加载现有的文件,不再重复下载(从而增强性能)。本章稍后会展示包含codeBase元素的一个示例配置文件。
相关文章推荐
- NET框架程序设计--简单应用程序部署(私有部署程序集)
- CLR via C# 3 读书笔记(17):第3章 共享程序集和强命名程序集 — 3.1 两种程序集,两种部署方式 & 3.2 对程序集进行强命名
- 如何部署强命名程序集(Strong Name Assembly)和GAC
- [ZT]如何部署强命名程序集(Strong Name Assembly)和GAC
- 强命名程序集和部署到GAC
- 解决VS2005/VS2008下在子目录下部署DLL的私有程序集部署问题
- .net中的如何私有部署强命名组件
- 强命名程序集及其部署
- 2.7 简单应用程序部署(私有部署的程序集)
- Reporting Service中部署引用的程序集
- SQL Server 2008R2部署程序集时"Clr 程序集必须具有指定的主文件"的处理方法
- .NET 程序集的强命名和弱命名
- 命名空间“System.Data”中不存在类型或命名空间名称“Entity”(是否缺少程序集引用?)
- 命名空间“System.Web”中不存在类型或命名空间名称“HttpUtility”。是否缺少程序集引用?
- 解决方案、项目、程序集、命名空间
- 部署docker 私有仓库
- maven设置部署程序集
- 如何创建强命名程序集, 如何查看强命名程序集的PublicKeyToken
- [C#错误]未找到类型或命名空间名称" " (是否缺少 using 指令或程序集引用?)
- CS0246 未能找到类型或命名空间名“List<Vector2>”(是否缺少 using 指令或程序集引用?) RoguelikeProject C:\Users\Fang\Documents\Ro