项目间共享DLL的问题

为什么项目间要共享DLL?

之所以要这样,是因为我们想把常用的一些方法封装成dll,然后在以后的项目中就可以从一个地方调用。以前的做法是新建一个类库项目放到项目里的,从项目里添加引用。

现在就是不想所有的项目都带这一共用的类库,于是就想编译成一个dll,放到一个地方,有需要用的话,都从这一个地方引用。

初步尝试放到system32下面

在我的本机,将编译好的dll,复制到system32的根目录下,然后再项目里添加引用,并把该dll的 复制到本地 的属性设置为false,在本机测试OK。

然后在服务器上,也把dll复制到system32下面。

发布我的应用程序,测试,发现无法运行,加载不了这个dll,按常理运行的时候在发布的目录找不到dll,应该会去system32里面找才对啊。

 

再次尝试放到全局缓存GAC里

首先将dll强命名,然后通过以管理员身份运行vs命令提示,输入 “gacutil /i / dll ”,将dll 加入到全局缓存。一般来说将dll 有两种简单方法,一个是打开GAC的窗口,然后将dll直接拖进去(在xp下成功,win 7下我试了拒绝访问,可能是权限的问题),另一个是用上面的命令,开始我没有以管理员的身份运行命令行一直提示不成功。不过奇怪的是我的用户已经在administrators组了,还是不行,windows 7 下面的管理员权限让我搞不明白。反正右键以管理员权限运行就可以成功加入到GAC中。

接下来,问题就来了,一直在尝试从项目添加这个dll ,可以就是加不上去。在网上查资料得知,MS是不允许我们在design的时候从GAC引用dll. GAC实际是一个runtime的全局缓存。

 The fact that we do not allow you to reference from the GAC is by design. The GAC is meant to be a runtime environment; the user does not necessarily have the right to reference/redistribute/build against assemblies contained in the GAC.
Thanks,
-- VS Core Project/Solution Team

到这时还没有好的解决方案,之前有在博问里提问,感谢园子里朋友的帮助,希望有高手指点。

该问题在博问的链接:http://space.cnblogs.com/q/16176/

 

posted @ 2010-07-30 15:57  szny  阅读(500)  评论(2编辑  收藏  举报