Где вы вложили манифест? EXE или DLL?
У вас есть два основных способа сделать это, оба включают превращение «общего» в частную сборку SxS путем создания манифеста для него.
Тогда:
Если DLL и DLL2 содержат манифесты, перечисляющие зависимые сборки, вам нужно добавить зависимую сборку к их манифестам, указав «acme.common» (например) в качестве зависимой сборки. Поскольку зависимые сборки всегда ищутся, по умолчанию в папке загружаемых модулей, каждая DLL будет загружать свою собственную локальную копию общих.
Если вы просто полагаетесь на контекст активации приложений по умолчанию для выполнения большей части тяжелой работы, то вы можете попробовать использовать ActivationContext API.
Вызовите CreateActCtx дважды, указав две две разные папки в качестве базовой папки для результирующего контекста.
В псевдокоде:
HACTCTX h1 = CreateActCtx( ... for DLL ... );
HACTCTX h2 = CreateActCtx( ... for DLL2 ...);
ActivateActCtx(h1,...);
LoadLibrary("C:\\DLL\\DLL1.DLL");
DeactivateActCtx();
ActivateActCtx(h2,...);
LoadLibrary("C:\\DLL2\\DLL2.DLL");
DeactivateActCtx...
Если библиотеки уже содержат свои собственные манифесты, система будет использовать их. Если нет, то это позволит вам указать каталог поиска для частных сборок, не изменяя сами библиотеки DLL.
Для реализации варианта 1:
Во-первых, я не рекомендую пытаться использовать имя dll в качестве имени сборки. Итак, создайте манифест, который выглядит так в каждой папке:
<!-- acme.common.manifest -->
<assembly manifestVersion="1.0">
<assemblyIdentity type="Win32" name="acme.common" version="1.0.0.0" processorArchitecture="x86"/>
<file name="common.dll"/>
</assembly>
Вы можете исправить номер версии, чтобы он соответствовал версии common.dll в каждой папке, но это не важно.
Затем, либо список манифеста, который вы перечисляете, или директива, подобная этой, если вы используете Visual Studio
#pragma comment(linker, "/manifestdependency:\"acme.common'"\
" processorArchitecture='*' version='1.0.0.0' type='win32'\"")
Просто убедитесь, что версии зависимых сборок соответствуют версиям соответствующей сборки acme.common.