奇怪的dll行为(问题检修)

奇怪的dll行为(问题检修),dll,enterprise-library,arcgis,Dll,Enterprise Library,Arcgis,我有一个dll项目,它从Microsoft Enterprise Library 3.1的安装目录中引用了Microsoft.Practices.EnterpriseLibrary.Common.dll(=“dll”)。它有一个以“b03f”开头的公钥。 我有另一个项目,它引用了Miner.Geodatabase.dllVersion9.30.2.5168(它在GAC文件夹中显示了9.2.0.0)。Miner dll有一个以“196b”开头的公钥。 第三个dll引用其他两个dll 下面是一个包含

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

下面是一个包含上述项目的简单vs2005解决方案 -
1.RefEL,仅从其lib文件夹中引用dll。
2.参考Geodatabse,仅引用GAC中的
Miner.Geodatabase.dll

3.参照两者,参照其他两个项目

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


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

好吧,我决定在GAC(以及生产计算机)中注册企业库的正常(“b03f”)版本。我已经使用link一次注册了所有DLL。工作得很有魅力

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

您使用的Visual Studio版本是什么?您使用的是项目引用还是文件引用?项目文件中的HintPath看起来像什么?如您所述,复制DLL是完全正常的。我使用的是vs2005 sp1(在未安装sp的情况下也会发生这种情况)。项目A将EL dll作为文件引用(在lib文件夹中),而不是从GAC引用。项目B通过GAC引用Miner.Geodatabase.dll(版本9.30.2.5168),编译后收到奇怪的EL dll。我不明白这个dll是从哪里来的。但是同时引用A和B的项目会得到这个奇怪的dll,而A在运行时会失败。