none
请问如何添加动态库搜索路径? RRS feed

  • 问题

  • 在项目中引用另一个项目之后,编译完以后,被引用的程序文件必须和引用者在同一目录,引用者才能正常运行,否则提示找不到某某动态库。

    请问,能不能设置其他目录到动态库的搜索路径?

    如果我有两个程序文件需要同一个动态库,但是由于组织结构的问题,两个程序文件不能放在同一文件夹下,难不成我非要拷贝同一个动态库的副本到两个文件夹中?

    后来想过用反射,但是也不行啊,为了不让程序依赖当前目录下的动态库,就不能用项目引用,不引用项目,那个项目中定义的类就无法使用,总不能每次都通过InvokeMethod调用方法吧。

    如果抽象接口,然后将接口定义文件拷贝到每个项目中也不行,因为无法将GetInstance返回的object转换成对应的接口类型,会抛类型转换异常,因为它认为在两个不同程序集中有重名的类定义。

    我看了一下,手动加载的程序集和默认的程序集在不同的上下文环境中,它会认为不同的上下文环境中有冲突的类定义。不知道怎么解决?


    LHL
    2011年6月27日 6:20

答案

  • 建立全局共享的程序集。

    在昨天一个回复中发过。

    可以使用共享程序集的方式。主要有两个步骤:

    1.创建强命名程序集

    使用sn命令创建强命名程序集的密钥对

    例:sn -k testKey.snk

    然后打开这个dll的project,在程序集(dll)的属性-signing中添加这个密钥。

    2.安装共享程序集

    用gacutil命令安装全局程序缓存。

    例:gacutil -i xxx.dll

    这样当你引用这个程序集的时候就不需要复制到输出文件夹了,直接在全局程序集中添加。

    2011年6月27日 15:51

全部回复

  • 快捷方式设置环境参数,或是工作目录,或是软件中指定ApplicationPath
    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年6月27日 6:23
    版主
  • 建立全局共享的程序集。

    在昨天一个回复中发过。

    可以使用共享程序集的方式。主要有两个步骤:

    1.创建强命名程序集

    使用sn命令创建强命名程序集的密钥对

    例:sn -k testKey.snk

    然后打开这个dll的project,在程序集(dll)的属性-signing中添加这个密钥。

    2.安装共享程序集

    用gacutil命令安装全局程序缓存。

    例:gacutil -i xxx.dll

    这样当你引用这个程序集的时候就不需要复制到输出文件夹了,直接在全局程序集中添加。

    2011年6月27日 15:51