2009-08-24 33 views
1

我有引用Microsoft.Practices.EnterpriseLibrary.Common.dll一个DLL项目(=“的dll”)从我的微软企业库3.1的安装目录。它有一个以“b03f”开头的公钥。
我有另一个项目,参考Miner.Geodatabase.dll版本9.30.2.5168(它显示GAC文件夹中的9.2.0.0)。 Miner DLL有一个以“196b”开头的公钥。
第三个DLL引用另外两个。奇怪的DLL行为(问题大修)

这里的上述项目 ELTest.rar一个简单的VS2005的解决方案 -
1 REFEL,只是引用的dll从它的lib文件夹。
2. RefGeodatabse,仅参考GAC的Miner.Geodatabase.dll
3. RefBoth,引用其他两个项目。

编译后,REFEL的bin/debug文件夹中包含了 “b03f”( “真实”)的的dll版本,而RefGeodatabase和RefBoth的bin /调试包含一个版本的的dll一个以“196b”开头的公钥 - 与Miner DLL相同。在我看来,他们已经重新编译了企业库(并可能改变了一些东西)。
在运行时(在我真正的解决方案中,不是在这个虚假的解决方案中),我的“两个”项目调用“EL”项目,需要“b03f”dll,找不到它,并崩溃。

我该怎么办?也许如果我在GAC中注册企业库DLL,它们将在运行时找到。是否有不同的解决方案不需要我在目标计算机上安装entlib?

+0

您使用的是Visual Studio的哪些版本?你在使用项目引用还是文件引用?项目文件中的HintPaths是什么样的?按照您所描述的方式复制DLL是完全正常的。 – 2009-08-24 12:21:38

+0

我正在使用vs2005 sp1(同样发生没有安装sp)。项目A将EL dll作为一个文件(位于lib文件夹内)引用,而**不是**来自GAC。 项目B通过GAC引用Miner.Geodatabase.dll(版本9.30.2.5168),编译后会收到奇怪的EL dll。 我不明白这个DLL来自哪里。但引用A和B的项目会得到这个奇怪的DLL,并且A在运行时失败。 – 2009-08-24 12:37:10

回答

0

那么,我已决定在我的GAC(以及生产计算机)上注册企业库的正常版本(“b03f”)。我用this链接一次注册所有的dll。像魅力一样工作。现在

,我REFEL项目引用的的GAC版本的DLL,并且即使RefGeodatabase具有Miner.Geodatabase.dll,它引用来自海关总署的“196B”版本CopyLocal = true,则在运行时我的项目在GAC中找到“b03f”版本并且不会崩溃。