Effective C# 第4章:创建基于二进制的组件
2009-02-19 08:16:12 来源:WEB开发网确定正确的程序集以后,CLR接来就断定这个程序集是否已经在当前的应用程序中加载。如果是,就用原来的。如果不是,CLR就继承查找程序集。如果程序是强名称的,CLR就先在全局程序缓存(GAC)中查找,如果不在GAC中,加载器就检测代码目录(codebase directory,译注,这里只是译为代码目录,其实并不是源代码所在的目录)中的配置文件,如果当前代码目录存在,那就是唯一被搜索程的目录了。如果在代码目录中没有找到所要的程序集,那么加载就失败。
如果没有直接的代码目录,加载器会搜索预先设定的目录集:
* 应用程序目录。也就是与主应用程序集同在的位置。
* 语言目录。这是一个在应用程序目录下的子目录,这个目录与当前语言名匹配。
* 程序集子目录。这是一个与程序集同名的子目录,这两个可以组合成这样: [语言]/[程序集名]
* 私有的运行目录(binPath)。这是一个在应用程序配置文件中定义的私有目录。它同样可以和语言和程序集名组合: [bin目录]/[程序集名], 或者[bin目录]/[语言], 还可以是:[bin目录]/[语言]/[程序集名]。
从这个讨论中你应该明白三个内容:第一,只有强名称程序集才能放到GAC中。其次,你可以通过配置文件来修改默认的行为,从而升级程序中个别的强名称程序集。第三,强名称程序集可以阻止对程序集的恶意篡改,从而提供更安全的应用程序。
了解CLR是如何加载程序集的,有利于在实际操作中考虑如何创建和更新组件。首先,你应该使用强名称程序集,把所有的元数据信息都记录下来。当你在VS.net中创建一个项目时,你应该把assemblyInfo.cs文件中的所有属性都填满,包括完整的版本号。这会让你在后面的升级中更简单的。VS.net在assemblyInfo.cs中创建三个不同的部份,首先就是信息报告:
- ››基于IP地址的vsftp服务器
- ››创建SQL2005自动备份,定期删除的维护计划
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››创建动态表单 javascript
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››基于Windows Azure的云计算应用设计
- ››基于AES算法实现对数据的加密
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››基于SoPC目标板Flash编程设计的创建及应用
更多精彩
赞助商链接