首页 新闻 会员 周边

怎么能让多程序引用同一个dll ?

0
[已解决问题] 解决于 2010-07-07 07:27

有多个程序需要引用 一个vb程序编译出来dll,现在的状态是每个程序都各自包含有这个dll,自己引用自己的dll。

因为那个dll经常会有改动,为了保证版本一致,想让各个程序都使用同一个dll(而不是各自用一个)。最好就是把这个dll固定放在系统的哪个位置,然后每个程序都到那个位置找dll...

请问这个该怎么实现呢?

 

我觉得是不是可以把我的dll注册一下成为系统默认那类的dll一样,大家都可以用....?

比如我把dll放到“C:\dll”下的话,如果我用 regsvr32 "C:\dll\xxxx.dll" 注册了这个dll之后,是不是这个dll就相当于是系统里默认的dll一样,这个系统下的每个程序都可以随便使用它了?如果是这样的话是不是就不用在每个程序的bin文件夹下添加这个dll的引用了啊??还是应该在哪里指定一下告诉程序应该到本地“C:\dll”去找这个dll???

菜鸟不太懂,还请高手指教~ 谢谢

问题补充: 最好不要用反射捏~ 因为如果用反射就得改好多代码,而且还得把所有程序都改一遍..... 还有可能牵涉到不归我管的一堆程序... = =||| 所以考虑到方便性,还是请大家尽量提供一些不用改代码,或是不太需要改代码的方法吧... orz 比如,简单加个引用或者声明啥的,这种程度的是可以接受的... 谢谢大家 (┬_┬)
我爱阳光的主页 我爱阳光 | 菜鸟二级 | 园豆:204
提问于:2010-06-24 08:52
< >
分享
最佳答案
0

看了你补充的内容后,知道你是 .net 组件。如果你不打算用 GAC ,还有一个办法,参考下面文章

http://topic.csdn.net/u/20080304/09/b08ce604-5b9b-4f98-a989-c882af25dd90.html?868839457

在 app.config 中加入一些配置就可以了。你试试看吧

注意:

privatePath 设置的路径必须是你当前exe 文件所在路径的子目录才行。

或者你在程序中加入 AppDomain.CurrentDomain.AppendPrivatePath 这么一句也可以,效果一样。

eaglet | 专家六级 |园豆:17139 | 2010-06-24 09:19
8素COM 组件......... 囧 动态绑定??怎么绑?? - =
我爱阳光 | 园豆:204 (菜鸟二级) | 2010-06-24 09:39
话说怎么弄成com组件啊?............ orz
我爱阳光 | 园豆:204 (菜鸟二级) | 2010-06-24 10:06
不好意思 最近比较忙这个问题拖的太久了.... 我会尝试一下这个方法,感谢您的关注和更新 :)
我爱阳光 | 园豆:204 (菜鸟二级) | 2010-07-07 07:26
其他回答(4)
0

你说的注册dll的方法基本不可行,目前可以解决的办法可以是如下几种(暂时提供2种):

1、你在你机器上创建比如D:\\Dependencies目录,然后把这个公用的dll拷贝到该目录,之后再你的工程中进行引用,引用的方式和上一个问题雷同,只是这一次使用的是Browse(中文是 浏览)然后找到D:\\Dependencies目录下的dll文件,添加引用到工程中,其他的项目使用同样的方式进行引入。

2、你可以把你的这个dll文件作一个安装包,然后安装到固定的目录,当然也可以是D:\\Dependencies目录哦,然后其他的工程中进行约定,都引用这个安装目录下的dll即可...

 

其实解决办法有很多的,不过这两种是最常见的,第一种在一般的开发中大家都会使用,第二钟方式其实是和.NET本身安装后的原理一样

西越泽 | 园豆:10775 (专家六级) | 2010-06-24 09:11
我当然是喜欢第一种做法,可是问题是如果用browse选择了D:\\Dependencies目录下的dll文件,那个这个dll就会自动被加入bin文件夹下啊~ 那最后发布程序打包的时候,各个程序用的还是自己bin文件夹下的dll啊!那我的问题岂不是没有解决? - = 我是希望这个dll不要被放入每个程序的bin文件夹下而是固定的放一个地方,然后让程序自己能找到它.... 这样的话,如果需要更新dll,我只要固定更新一个地方的dll就好了,而不是每个程序都得更新。
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2010-06-24 10:00
@小奈鲁:呵呵!这么说的话那建议你使用GAC吧,GAC可以解决你的这个问题,GAC相关的只是点你可以查阅MSDN... 同时不好意思,刚刚回复的时候对你说的理解的有问题
支持(0) 反对(0) 西越泽 | 园豆:10775 (专家六级) | 2010-06-24 11:58
支持GAC发布
支持(0) 反对(0) LittlePeng | 园豆:3445 (老鸟四级) | 2010-06-24 21:49
@卡索:呵呵,还是很谢谢您的~ GAC。。。我有时间查一查撒~ 感谢回答!!!
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2010-07-07 07:27
0

可以利用反射来实现dll文件的引用。

将.dll文件在其中一个系统安装的时候,复制到固定目录“c:/asd.dll”然后利用反射根据这路径生成这个dll的实例对象。其它系统安装的时候判断是否存在这个dll,存在的话就不再复制。

object objType = Assembly.Load(path).CreateInstance(key)

邢少 | 园豆:10926 (专家六级) | 2010-06-24 09:17
反射.................... - =
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2010-06-24 09:44
0

嗯,反射,即动态绑定是可以的。

邢少说的方法可行。

WildWeeds | 园豆:285 (菜鸟二级) | 2010-06-24 10:27
不用反射不行么??(┬_┬)
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2010-06-24 11:24
0

如果有那个dll的项目源码的话直接引用项目吧,被引用项目更新编译后,各个引用了它的项目也会自动更新引用的dll的.

 

不过如果你说的多程序,如果不再更新了的话,估计也不行.

 

要不在你被引用的"项目属性"的"生成事件"中写bat吧,生成后把生成的dll复制到各个程序的bin目录去.

I,Robot | 园豆:9783 (大侠五级) | 2010-06-24 16:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册