标签:
一个应用程序的XML配置文件示例:
<?xml version="1.0"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="AuxFiles;bin\subdir" /> <dependentAssembly> <assemblyIdentity name="JeffTypes" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" /> <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" /> <codeBase version="2.0.0.0" href="http://www.Wintellect.com/JeffTypes.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="TypeLib" publicKeyToken="1f2e74e897abbcfe" culture="neutral" /> <bindingRedirect oldVerison="3.0.0.0-3.5.0.0" newVersion="4.0.0.0" /> <publisherPolicy apply="no" /> </dependentAssembly> </asssemblyBinding> </runtime> </configuration>
这个XML文件为CLR提供了丰富的信息。具体如下所示。
编译方法时,CLR会确定它引用了哪些类型和成员。根据这些信息,“运行时”检查发出引用的那个程序集的AssemblyRef表,判断该程序集在生成时引用了哪些程序集。然后,CLR在应用程序配置文件中检查程序集/版本,并进行设定的任何版本号重定向操作。接着,CLR查找新的、重定向的程序集/版本。
如果publisherPolicy 元素的 apply attribute 设为 yes,或者该元素被省略,CLR 会在GAC 中检查新的程序集/版本,并进行程序集发布者认为有必要进行的任何版本号重定向操作。随后,CLR会查找新的、重定向的程序集/版本。(关于发布者策略有抓们的笔记记录)最后,CLR在机器的Machine.config文件中检查新的程序集/版本,并进行设定的任何版本号重定向操作。
到此为止,CLR已经知道了它应该加载的程序集的版本,并尝试从GAC中加载该程序集。如果程序集不在GAC中,而且没有codeBase元素,CLR会探测程序集。如果执行最后一次重定向操作的配置文件同时包含一个codeBase元素,CLR会尝试从codeBase元素指定的URL处加载程序集。
利用这些配置文件,管理员可以实际地控制CLR加载的程序集。如果一个应用程序出现bug,管理员可以和有问题的程序集的发布者取得联系。发布者可以将一个新的程序集发送给管理员,让管理员安装。CLR默认不会加载这个新的程序集,因为已经生成的程序集没有引用的新版本。不过,管理员可以修改应用程序的XML配置文件,指示CLR加载新的程序集。
如果管理员希望机器上的所有应用程序都使用新的程序集,可以修改机器的Machine.config文件(而不是修改应用程序的配置文件)。每当一个应用程序引用就得程序集时,CLR都会自动加载新的程序集。
如果发现新的程序集没有修复原来bug,管理员可以从配置文件中删除bindingRedirect设置,应用程序会恢复如初。
重点概括:系统允许使用和元数据所记录的不完全匹配的一个程序集版本。
读经典——《CLR via C#》(Jeffrey Richter著) 笔记_高级管理控制(配置)
标签:
原文地址:http://www.cnblogs.com/lishidefengchen/p/4446061.html