【发布时间】:2010-11-22 05:59:27
【问题描述】:
我有一个 dll 项目,它从 Microsoft Enterprise Library 3.1 的安装目录中引用了 Microsoft.Practices.EnterpriseLibrary.Common.dll (="the 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”(“真实”)版本,而 RefGeodatabase 和 RefBoth 的 bin/debug 包含 dll 的公钥以“196b”开头 - 与 Miner dll 相同。在我看来,他们已经重新编译了企业库(并且可能改变了一些东西)。
在运行时(在我的真实解决方案中,而不是在这个伪造的解决方案中),我的“两个”项目调用“EL”项目,需要“b03f”dll,找不到它,然后崩溃。
我该怎么办?也许如果我在 GAC 中注册企业库 dll,它们会在运行时找到。是否有其他解决方案不需要我在目标计算机上安装 entlib?
【问题讨论】:
-
您使用的是什么版本的 Visual Studio?您使用的是项目引用还是文件引用?项目文件中的提示路径是什么样的?按照您的描述复制 DLL 是完全正常的。
-
我使用的是 vs2005 sp1(在没有安装 sp 的情况下也会发生)。项目 A 将 EL dll 引用为文件(在 lib 文件夹内),并且 not 来自 GAC。项目 B 通过 GAC 引用 Miner.Geodatabase.dll(版本 9.30.2.5168),编译后收到奇怪的 EL dll。我不明白这个 dll 是从哪里来的。但是同时引用 A 和 B 的项目会得到这个奇怪的 dll,并且 A 在运行时失败。
标签: dll enterprise-library arcgis