Бок о бок в dll

У меня следующая ситуация:

  • Исполняемый файл, разработанный на C#, связывает управляемую библиотеку DLL, которая вызывает другую стороннюю библиотеку DLL (загружаемую параллельно). exe не использует напрямую какой-либо объект из сторонней DLL.

Отношения между компонентами:

EXE -->> myDLL >> 3rdPartyDLL

Я хотел бы установить ссылку на стороннюю DLL только в myDLL.manifest (собрав ее с помощью mt.exe) следующим образом: myDLL.manifest

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="myDLL"/>
  <dependency>
   <dependentAssembly>
      <assemblyIdentity type="win32" name="ThirdPartyDLL" version="1.0.0.0"/>
   </dependentAssembly>
  </dependency>
<file name ="myDLL.dll"/>
</asmv1:assembly>

Но когда я запускаю EXE, он вызывает исключение, потому что не находит 3partyDLL. Это работает только в том случае, если я также вставлю в EXE.manifest зависимость от 3rdPartyDLL.

Но в этом случае каждый раз, когда сторонняя DLL меняет версию (также для небольших исправлений), мне нужно перекомпилировать EXE, чтобы встроить в него манифест.

Я попытался найти какой-нибудь практический пример с таким сценарием, но ничего не нашел. Есть ли какая-либо ссылка или практический пример об этом?


person max    schedule 30.11.2017    source источник
comment
Он активирует манифест, встроенный в эту DLL. Постоянное изменение объявленной версии в этом манифесте бесполезно. Они просто не знают, какие трудности это причиняет вам, пока вы не возьмете трубку и не расскажете им об этом.   -  person Hans Passant    schedule 01.12.2017


Ответы (1)


Где в вашей системе находится 3rdPartyDLL? Это в той же папке, что и у exe или по какому-то другому пути? Вместо добавления зависимости 3rdPartyDLL в EXE.manifest убедитесь, что 3rdPartyDLL находится в той же папке, что и exe.

person Amit Rastogi    schedule 01.12.2017
comment
Да они все в одной папке. - person max; 08.12.2017