奇怪的DLL行为(问题大修)

时间:2009-08-24 11:16:59

标签: dll enterprise-library arcgis

我有一个dll项目,它引用了{em> Microsoft Enterprise Library 3.1 的安装目录中的Microsoft.Practices.EnterpriseLibrary.Common.dll(=“ dll ”)。它有一个以“b03f”开头的公钥 我有另一个引用Miner.Geodatabase.dll版本9.30.2.5168的项目(在GAC文件夹中显示9.2.0.0)。 Miner dll有一个以“196b”开头的公钥 第三个dll引用另外两个。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

现在,我的RefEL项目引用了 dll 的GAC版本,即使RefGeodatabase有Miner.Geodatabase.dll,它使用CopyLocal = true引用GAC中的“196b”版本,在运行时,我的项目在GAC中找到“b03f”版本,并且不会崩溃。