我想完全按照这里描述的那样做,但是接受的解决方案对我不起作用.我想这里解释的原因是:
如果通过指定完整路径来加载具有依赖项的DLL,则系统将搜索DLL的相关DLL,就好像它们仅使用其模块名称一样加载.
如果已在内存中加载具有相同模块名称的DLL,则系统会在解析到加载的DLL之前仅检查重定向和清单,无论它在哪个目录中.系统不会搜索DLL.
我希望我的应用程序在以下结构中.
c:\Exe
|
|----- c:\DLL\DLL.dll, c:\DLL\common.dll
|
|----- c:\DLL2\DLL2.dll, c:\DLL2\common.dll
Run Code Online (Sandbox Code Playgroud)
我的EXE将加载DLL
LoadLibrary("c:\\DLL\\DLL.dll");
LoadLibraryEx("c:\\DLL2\\DLL2.dll");
Run Code Online (Sandbox Code Playgroud)
在两种情况下都隐式加载common.
我尝试了SetDllDirectory选项,但总是只加载了一个common.dll.
我在common.dll中添加了版本信息.c:\ DLL\common.dll的版本为2.0.1.0,而c:\ DLL2\DLL2.dll的版本为4.0.1.0
我使用相应的版本信息嵌入了以下清单,但它没有帮助.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="common" version="4.0.1.0" processorArchitecture="x86"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)
有这个问题的解决方案吗?
我的应用程序使用一个版本的库(a.dll),我正在使用另一个DLL(b.dll),后者又使用我使用的相同库(a.dll)的旧版本.我正在通过嵌入清单文件来构建应用程序.我使用的DLL也使用嵌入式清单文件.我在WinSXS文件夹中有两个版本的库.我的应用程序无法加载适当版本的DLL.
是否有单独的清单文件(不嵌入DLL)有助于解决问题?有什么工作?