我的代码依赖于通常安装在系统文件夹中的第三方dll。当我运行一些引用这个dll的代码时,它可以很好地工作,因为它可以从System32或SysWOW64中获取它,这取决于进程的位版本。但是,只有当dll位于bin文件夹中时,它才能使用其他代码,如果不是,则抛出未找到的异常。
是什么原因导致.net程序分别在System32或SysWOW64中查找文件?
发布于 2013-11-11 10:20:20
“第三方DLL”是模糊的,但如果它们是非托管DLL,则符合要求。通常由程序中的DllImport指令引用。CLR要求Windows加载DLL,它需要找到DLL,并且只在几个地方查找文件。存储EXE的目录是第一个,下一个是Windows系统目录,接下来是PATH环境变量列出的目录。因为搜索总是包括Windows系统目录,所以它往往被ab/用来存储那些DLL。
如果DLL是.NET程序集,那么这将不起作用,CLR将不会查看操作系统目录或文件的路径目录。它首先在GAC中查找,即存储EXE next的目录。如果在<probing>文件中使用app.exe.config元素,则可以选择在EXE目录的子目录中查找。所以这可能是你的案子的原因。
始终将DLL存储在与EXE相同的目录中,这样就避免了很多麻烦。Windows系统目录不是一个好地方,DLL地狱是一个非常不愉快的问题。
https://stackoverflow.com/questions/19902106
复制相似问题