DLL位置问题

时间:2009-06-10 10:28:07

标签: c# dll

发生了一些奇怪的事情 - 至少对我而言 - 正如我在3层模型中所知道的那样,你制作DLL并让你的UI引用它们,现在我的工作方式是:DAL的ClassLibrary项目,另一个一个用于BLL,参考位于DAL bin / debug目录中的DAL DLL,以便BLL ClassLibrary项目立即实现DAL更改,然后是一个Windows应用程序项目,引用位于各自bin / debug上的BLL和DAL DLL目录。 然后我想测试并检查当应用程序找不到它引用的DLL时生成的异常,我剪切了DLL并将它们放在另一个位置,应用程序仍然正常工作!!?那很奇怪,但我猜想也许在运行Windows应用程序时它会再次重新创建这些DLL,所以我将这些DLL放在桌面上的另一个文件夹中,我从Windows应用程序中删除旧的引用并重新创建它们,这次指向那些桌面文件夹并测试它,之后我删除桌面文件夹和应用程序仍然正常工作并连接到数据库和每件事??? 环境: XP SP2 VisualStudio 2008 C#

4 个答案:

答案 0 :(得分:1)

编译器将dll复制到它自己的bin文件夹中并使用它们。因此,您必须清理项目才能看到差异。

答案 1 :(得分:1)

运行fusion log viewer“fuslogvw”并将其配置为记录程序集绑定。这将显示正在加载的程序集以及从哪个位置加载。

答案 2 :(得分:0)

Dll通常按以下方式加载:

1)本地目录

2)全局程序集缓存

3)Windows / system32目录

最后两个可能会被交换。我不记得了。

此外,Process Explorer非常适合查看加载的DLL和加载的位置。只需确保它设置为显示单击可执行文件时加载的DLL。

答案 3 :(得分:0)

您无法在Visual Studio中对此进行测试,因为build / debug / run将重建引用。 删除引用将破坏您的代码,因为编译器会拒绝并拒绝编译应用程序,如您所述。

您需要编译应用程序,然后使用Windows资源管理器从bin文件夹中删除DLL,然后双击该应用程序运行该应用程序。不使用Visual Studio。

这将抛出一些描述的例外,它将弹出一个小盒子。 JIT调试器也可以捕获它(可能??)并让你使用VS附加到进程,但我不确定。