第 1 步:检查配置文件

可以基于三个 XML 文件在不同的级别下配置程序集绑定行为:

  • 应用程序配置文件。

  • 发行者策略文件。

  • 计算机配置文件。

这些文件使用相同的语法,并且给特定程序集提供诸如绑定重定向、代码位置以及绑定模式等信息。 每个配置文件都可以包含用于重定向绑定过程的 <assemblyBinding> element<assemblyBinding> element的子元素包括<dependentAssembly> element<dependentAssembly> element的子元素包括<assemblyIdentity> element<bindingRedirect> element<codeBase> element

备注

可以在三个配置文件中找到配置信息;并非所有元素在所有配置文件中均有效。例如,绑定模式和专用路径信息仅在应用程序配置文件中有效。有关每个文件中包含的信息的完整列表,请参见配置应用程序

应用程序配置文件

第一,在应用程序配置文件中,公共语言运行时检查覆盖调用程序集清单中存储的版本信息的信息。 应用程序配置文件可以随应用程序一起部署,但它并不是应用程序执行所必需的。 通常,此文件的检索几乎是在瞬间完成的,但是当应用程序基在远程计算机上时(例如,在 Internet Explorer 基于 Web 的方案中),必须下载配置文件。

对于客户端可执行文件,应用程序配置文件与应用程序可执行文件位于同一个目录中,并且两者具有相同的基文件名,但应用程序配置文件的扩展名为 .config。 例如,C:\Program Files\Myapp\Myapp.exe 的配置文件为 C:\Program Files\Myapp\Myapp.exe.config。 在基于浏览器的方案中,HTML 文件必须使用 **<link>**元素显式指向该配置文件。

下面的代码提供了应用程序配置文件的简单示例。 此示例将一个 TextWriterTraceListener 添加到 Listeners 集合,以便可以将调试信息记录到文件中。

<configuration>
   <system.diagnostics>
      <trace useGlobalLock="false" autoflush="true" indentsize="0">
         <listeners>
            <add name="myListener" type="System.Diagnostics.TextWriterTraceListener, system version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
         </listeners>
      </trace>
   </system.diagnostics>
</configuration>

发行者策略文件

第二,运行时检查发行者策略文件(如果存在的话)。 发行者策略文件是由组件发行者作为共享组件的修正或更新分发的。 这些文件包含共享组件发行者发布的兼容性信息,这些信息将程序集引用指向新版本。 与应用程序配置文件和计算机配置文件不同,发行者策略文件包含在其自己的程序集中,该程序集必须安装在全局程序集缓存中。

下面是发行者策略配置文件的示例:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

            <dependentAssembly>
                <assemblyIdentity name="asm6" publicKeyToken="c0305c36380ba429" /> 
                <bindingRedirect oldVersion="3.0.0.0" newVersion="2.0.0.0"/>  
            </dependentAssembly>

        </assemblyBinding>
    </runtime>
</configuration>

若要创建程序集,可以通过如下所示的命令使用Al.exe(程序集链接器) 工具:

Al.exe /link:asm6.exe.config /out:policy.3.0.asm6.dll /keyfile: compatkey.dat /v:3.0.0.0

compatkey.dat 是一个强名称密钥文件。 此命令创建一个可放入全局程序集缓存中的强名称程序集。

备注

发行者策略影响使用某个共享组件的所有应用程序。

发行者策略配置文件覆盖来自应用程序的版本信息(即,来自于程序集清单或应用程序配置文件)。 如果应用程序配置文件中没有重定向程序集清单中指定的版本的语句,则发行者策略文件覆盖程序集清单中指定的版本。 但是,如果应用程序配置文件中有重定向语句,则发行者策略覆盖该版本,而不是覆盖清单中指定的版本。

在更新共享组件时会使用发行者策略文件,所有使用该共享组件的应用程序都应该选取该组件的新版本。 除非应用程序配置文件实施了安全模式,否则发行者策略文件中的设置覆盖应用程序配置文件中的设置。

8f6988ab.collapse_all(zh-cn,VS.110).gif安全模式

通常,发行者策略文件是作为 Service Pack 或程序更新的一部分显式安装的。 如果升级的共享组件有任何问题,则可以使用安全模式忽略发行者策略文件中的覆盖。 安全模式由**<publisherPolicy apply="yes** |**no"/>**元素仅位于应用程序配置文件中。 安全模式指定是否应该从绑定过程中移除发行者策略配置信息。

可以为整个应用程序或选定的程序集设置安全模式。 即,既可以为组成应用程序的所有程序集打开策略,也可以只为某些程序(而不为其他程序集)集打开策略。 若要将发行者策略有选择地应用到组成应用程序的程序集,请设置 <publisherPolicy apply=no/>并使用<dependentAssembly>元素指定要影响哪些程序集。 若要将发行者策略应用到组成应用程序的所有程序集,请设置<publisherPolicy apply=no/>,并且不包含依赖程序集元素。 有关配置的更多信息,请参见配置文件

计算机配置文件

第三,运行时检查计算机配置文件。 该文件(称为 Machine.config)位于本地计算机上安装运行时的根目录的 Config 子目录中。 管理员可以使用该文件指定该计算机的本地的程序集绑定限制。 计算机配置文件中的设置优先于所有其他配置设置;但是,这并不是说应该将所有配置设置放在该文件中。 管理员策略文件确定的版本是最终版本,并且不能被覆盖。 Machine.config 文件中指定的覆盖影响所有的应用程序。 有关配置文件的更多信息,请参见配置文件

请参见

概念

运行时如何定位程序集

第 2 步:检查以前引用的程序集

第 3 步:检查全局程序集缓存

第 4 步:通过基本代码或探测定位程序集

部分程序集引用