是什么原因导致.net程序在System32或SysWOW64中查找文件?

时间:2013-11-11 08:44:19

标签: .net dll

我的代码依赖于通常安装在系统文件夹中的第三方dll。当我运行一些引用此dll的代码时,它可以正常工作,因为它从System32或SysWOW64中获取它,具体取决于进程的位版本。但是使用其他一些代码时,只有当dll位于bin文件夹中时才会起作用,否则会抛出文件未找到异常。

是什么导致.net程序分别在System32或SysWOW64中查找文件?

1 个答案:

答案 0 :(得分:3)

“第三方DLL”是模糊的,但如果它们是非托管DLL,它就符合要求。通常由程序中的[DllImport]指令引用。 CLR要求Windows加载DLL,它需要找到DLL并查看该文件的几个位置。存储EXE的目录首先是Windows系统目录,接下来是PATH环境变量列出的目录。由于搜索始终包含Windows系统目录,因此它往往用于存储这些DLL。

如果DLL是.NET程序集,那么这将不起作用,CLR永远不会查看操作系统目录或文件的PATH目录。它首先在GAC中查找下一个存储EXE的目录。如果使用app.exe.config文件中的<probing>元素,可以选择查看EXE目录的子目录。所以这就是你个案的可能原因。

始终将DLL存储在与EXE相同的目录中,这样可以避免很多麻烦。 Windows系统目录不是一个好地方,DLL Hell是一个非常令人不快的问题。

相关问题