首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

11.11  <codeBase>元素

应用程序配置文件也可以配置<codeBase><codeBase>元素用于指示CLR查找位于任意位置(例如网络共享点,或者客户端应用程序目录以外的本地目录)的依赖程序集。

注解   <codeBase>元素的值指向远程计算机的时候相关程序集将会按需下载到GAC的下载缓存中。我们可以使用gacutil.exe结合/idl选项查看下载缓存中的内容。

由于GAC对部署其中程序集的要求,所以那些通过<codeBase>元素加载的程序集应该具有强名称(否则,CLR无法把远程程序集加载到GAC)。

注解   实际上,<codeBase>元素可以用于探测不具有强名称的程序集。但是,该程序集的位置必须是相对于客户端应用程序目录的(这一点与<privatePath>元素有点儿不同)。

创建控制台应用程序CodeBaseClient,添加对CarLibrary.dll 2.0.0.0版本的引用,然后改写生成的代码如下:

 

using CarLibrary;

 

namespace CodeBaseClient

{

  class Program

  {

    static void Main(string[] args)

    {

      Console.WriteLine("***** Fun with CodeBases *****");

      SportsCar c = new SportsCar();

      Console.WriteLine("Sports car has been allocated.");

      Console.ReadLine();

    }

  }

}

 

由于CarLibrary.dll被部署在GAC中,所以客户端程序可以正常运行。然而,为了说明<codeBase>元素,我们在C盘下创建一个新的文件夹(C:\MyAsms),然后把CarLibrary.dll2.0.0.0版本复制到该目录下。

CodeBaseClient项目添加App.config文件,然后编写以下XML内容(请记住.publickeytoken的值会和读者的有所不同,请到GAC中查看):

 

<configuration>

  <runtime>

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

      <dependentAssembly>

       <assemblyIdentity name="CarLibrary" publicKeyToken="219ef380c9348a38" />

       <codeBase version="2.0.0.0" href="file:///C:\MyAsms\CarLibrary.dll" />

      </dependentAssembly>

    </assemblyBinding>

  </runtime>

</configuration>

 

从上面可以看到,<codeBase>元素内嵌在<assemblyIdentity>元素中。<assemblyIdentity>元素使用name特性和publicKeyToken特性定义友好名称和对应的publicKeyToken的值。<codeBase>元素则指定需要加载的程序集的版本和位置(通过href属性)。现在,如果只把GAC中的CarLibrary.dll2.0.0.0版本删除,则客户端程序仍然可以正常运行,因为CLRC:\MyAsms下能够找到被请求的程序集。

但是如果把MyAsms目录删除,则客户程序将会运行失败。这是因为<codeBase>元素的设置优先于GAC

注解   如果在开发机器上随意放置程序集,则等同于为自己重新创建了一个系统注册表(这将会带来非常闻名的“DLL地狱”)。因为一旦移动或重命名程序集所在目录,相关应用程序将运行失败。因此,请谨慎使用<codeBase>

<codeBase>元素能够引用位于远程网络计算机上的程序集,这是非常有用的。假设你拥有足够的权限访问http://www.IntertechTraining.com。为了把远程的*.dll下载到本地机器上的GAC下载缓存,可以对<codeBase>元素做如下修改:

 

<codeBase version="2.0.0.0"

href="http://www.IntertechTraining.com/Assemblies/CarLibrary.dll" />

 

源代码      CodeBaseClient应用程序的源代码位于Chapter 11目录下。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论