【问题标题】:Strange dll behavior (Question overhaul)奇怪的 dll 行为(问题大修)
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多