在dll中并排

时间:2017-11-30 23:49:31

标签: .net dll manifest assemblies sxs

我有以下情况:

  • 在C#中开发的可执行文件链接一个托管DLL,它调用另一个第三方DLL(并排加载)。 exe并不直接使用第三方DLL中的任何对象。

组件之间的关系是:

EXE - >> myDLL>> 3rdPartyDLL

我想在myDLL.manifest(使用mt.exe编译它)中设置第三方DLL的引用,如下所示: 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以将清单嵌入其中。

我试图深入了解这种情况的一些实际例子,但我没有找到任何东西。 有没有关于它的参考或实际例子?

1 个答案:

答案 0 :(得分:0)

您的系统上的3rdPartyDLL在哪里?它是与exe的文件夹相同还是在其他路径中?而不是在EXE.manifest中添加3rdPartyDLL的依赖项,确保3rdPartyDLL与exe的文件夹在同一文件夹中。