随笔- 71  评论- 2344  文章- 1 

反射(4)绑定程序集配置策略

 

<runtime> <assemblyBinding> 元素

Xmlns特性,指定程序集绑定所需的 XML 命名空间。使用字符串“urn:schemas-microsoft-com:asm.v1”作为值。

<assemblyBinding>子元素如下:

1.         <dependentAssembly> 元素

封装每个程序集的绑定策略和程序集位置。为每个程序集使用一个 dependentAssembly 元素。

a)         <assemblyIdentity> 元素

b)         <bindingRedirect> 元素                   将一个程序集版本重定向到另一个版本。

c)         <codeBase> 元素           

确定要使用的程序集版本后,运行时应用确定版本的基本代码设置查找程序集。(可以有多个<codeBase>元素,用于对应不同程序集版本)

计算机配置文件或发布者策略文件中使用 <codeBase> 设置,该文件还必须重定向程序集版本。应用程序配置文件可在不重定向程序集版本的情况下拥有基本代码设置(即可不使用< bindingRedirect >元素)。

如果程序集具有强名称,则基本代码设置可以是本地 Intranet Internet 上的任何地方。如果程序集为私有程序集,则基本代码设置必须是相对于应用程序目录的路径。

注意:在使用<codeBase>,需要提供版本,公钥等长名称程序集标识信息,所以使用部分名称加载程序集不会使用配置策略。

2.         <probing> 元素

指定加载程序集时公共语言运行时要搜索的根位置下用户的子目录列表(必须是应用程序根目录的子目录),多个子目录可用分号隔开。

可以使用应用程序域的 AppendPrivatePath 属性,在应用程序配置文件和托管代码中指定此位置。当在托管代码中指定时,先探测托管代码 privatePath,随后探测应用程序配置文件中指定的路径。

3.         <publisherPolicy> 元素

指定运行时是否采用发行者策略配置信息。

4.         <qualifyAssembly> 元素

配置当动态加载程序集使用程序集的部分名称时应映射到的程序集全名 (名称、版本、区域性,如果适用还有公钥标记)

                                     要避免对部分程序集名称进行绑定,因为稳定性及兼容性不确定,如下:

a)         如果没有指定版本,则运行时会尝试用匹配其他指定条件的最高版本号定位程序集。

b)         如果没有指定区域性或公钥标记,则运行时对这两个特性的行为是未定义的。

----------注意:<publisherPolicy><codeBase> 应用区别

如果在一个目录中有一个程序集的多个版本,并且要引用该程序集的某个特定版本,则必须使用 <codeBase> 元素而不是 <probing> 元素的 privatePath 特性。如果使用 <probing> 元素,则运行时第一次找到与引用的简单程序集名称匹配的程序集时就会停止探测,而不论这是否是正确的匹配项。如果该程序集是正确的匹配项,则使用它。如果该程序集不是正确的匹配项,则停止探测,绑定失败。

        

      《反射机制》系列:

                 (1)程序集基础知识

                 (2)强名称程序集与数字证书

                 (3)程序集加载 Assembly类

                 (4)绑定程序集配置策略

                 (5)CLR 运行时探测程序集引用的步骤

                 (6)程序集加载上下文

                 (7)动态程序集加载Load()

                 (8)程序集反射 Type 类

                 (9)程序集的加载和反射

参考资源:

                MSDN<runtime> <assemblyBinding>

posted on 2012-03-31 19:38  滴答的雨  阅读(...)  评论(...编辑  收藏