none
关于<codeBase>元素的用法 RRS feed

  • 问题

  • 在项目中添加了App.config,内容如下:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <runtime>
      <assemblyBinding xmlns ="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
       <assemblyIdentity name =" CarLibrary" publicKeyToken="30d9105f2243067d" />
       <codeBase version="2.0.0.0" href="file:///C:/MyTest/CarLibrary.dll" />
       </dependentAssembly>
      </assemblyBinding>
     </runtime>
    </configuration>
    想让runtime定位项目所需的assembly,却出现这样这样的exception,内容如下:
    未处理 System.IO.FileNotFoundException
     Message="未能加载文件或程序集“CarLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=30d9105f2243067d”或它的某一个依赖项。系统找不到指定的文件。"
    我想请对这方面比较了解的朋友给点指点,谢谢。
    2010年6月6日 6:30

答案

  • 你好 请参考MSDN的描述

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

    如果你的程序集为私有的 建议直接使用privatepath配置就okay了。


    Raymond Tang (Microsoft C# MVP)
    Denn Ich Gehoer nur mir
    .NET交流群71840452
    微软中文论坛同城社区成都QQ群:74268428
    My Chinese Blog
    Chengdu,Sichuan Province,China
    2011年3月7日 14:55
    版主

全部回复

  • 你好 请检查下版本号、公钥等是否正确 以及 codebase的地址是否为file:///C:/MyTest/CarLibrary.dll 同时检查是否有读权限
    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    2010年6月7日 5:49
    版主
  • 你好 谢谢你的答复。

    上面的问题已经检查过了,文件存在,强名称也检查过了。至于读权限,我的是默认设置,查看CarLibrary.dll的属性,下面的“只读”和“隐藏”都没有打上勾,这样应该表示有读写权限吧。

    下面是一些实验细节:

    我实验的目标是:用exe Configuration file 中的<codeBase>元素来定位应用程序所需的外部程序集。所以没有使用只能用于相对路径的<privatePath>元素。关于<privatePath>的实验我做过了,实验成功。下面是我的实验步骤,希望能够让各位大哥师姐指点出错误:

    1.创建工程CodeBaseClient项目,并引用事先编译好的CarLibrary.dll,并且这个assembly已经被部署到GAC中。在executable application用到了assembly中的类。此时,编译一切正常,程序OK!

    2.我接下来想用一用<codeBase>的威力。于是,在项目中添加了一个App.config文件,内容如问题里所显示(“文化”默认是中性,版本是2.0.0.0,名称是CarLibrary,公钥标记是成GAC那边拷贝的,错不了。)。就这样,下载了GAC中的相关程序集,添加了程序配置文件,点击“保存全部”,然后再次编译,呵呵,很搞笑的,第一次程序可以运行成功,但第二次,第三次。。。都不行。这个步骤做了N遍,都这样,不知原因!Exception的基本信息如问题中的内容。

    以上就是实验的一些步骤和细节,至今这个问题也没得到解决。希望论坛里的哪位“神医”给做做诊断,以解吾一心病矣!在此,先提前谢谢大家了!

    2010年6月7日 6:20
  • 看提示是路径飞问题,找不到文件

    http://msdn.microsoft.com/zh-cn/library/efs781xb.aspx


    【孟子E章】
    2010年6月12日 2:01
    版主
  • 谢谢答复!

             检查了,文件在指定的路径中。

    2010年6月12日 8:34
  • 你好 请参考MSDN的描述

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

    如果你的程序集为私有的 建议直接使用privatepath配置就okay了。


    Raymond Tang (Microsoft C# MVP)
    Denn Ich Gehoer nur mir
    .NET交流群71840452
    微软中文论坛同城社区成都QQ群:74268428
    My Chinese Blog
    Chengdu,Sichuan Province,China
    2011年3月7日 14:55
    版主