在VS部署项目中引用共享的DLL

3
我编写了公司内部使用的程序。我创建了几个支持DLL,这些DLL在许多项目中都被引用。(例如通用数据访问助手)。 与每个程序目录中都有一个"datatools.dll"的副本(似乎是默认行为)不同,我希望只有一个副本可以被许多程序引用。就像我的自己的system32目录一样。
我已经向我的项目添加了"引用路径"。我先编译项目,然后再编译部署项目。安装程序正常工作。共享的dll位于我的引用路径中。 但是当我运行程序时,出现错误:"System.IO.FileNotFoundException: Could not load file or assembly 'datatools.dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified." 如果我将datatools.dll移动到exe所在的同一文件夹中,程序就可以顺利运行。
我能否创建和使用共享位置来存放共享的dll? 或者这只是一个坏主意?
3个回答

3

您可以使用VS2k8(请查看项目属性选项卡)签名并将其放入GAC。


感谢大家的快速回复。我正在使用VS2k8。我查看了你和Yuliy提到的签名选项,但担心这超出了我的能力范围。我将只在用户机器上使用多个副本。 - mohnston
有没有想法可以不签名呢?我的意思是我希望这些公共dll文件应该在隔离的文件夹中而不是我的应用程序文件夹中。一些dll文件不是我们自己的dll文件,这就是为什么签名是个问题。 - Denish
请让我知道,Mohnston,您是否得到了任何最终解决方案。 - Denish

2
如果您正在使用.NET,解决这种问题的典型方法是将这些共享程序集部署到GAC(全局程序集缓存),最好作为独立的部署项目。

1

看起来你有一个多项目解决方案。请确保所有引用DataTools.dll程序集的项目都指向正确(新)的位置。

根据你的IDE,你可能需要尝试一些奇怪的事情,比如删除旧引用,构建它(并观察它崩溃),然后从新位置重新添加它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接