1

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

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

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

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

4

1 回答 1

0

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

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

于 2009-08-25T08:28:07.803 回答