我自己的(本机)DLL的清单

时间:2012-10-12 06:32:52

标签: visual-c++ dll versioning manifest side-by-side

注意:这个问题关于MFC / CRT DLL与/ .manifest文件的链接,避免清单查找(即从当前路径强制加载),VC redist安装和类似问题。

我有一组DLL,由不同的应用程序使用。这些应用程序和DLL有一些产品版本(如7.0,8.0等)。总而言之,让我使用一个DLL和两个应用程序。

  • App.exe取决于Core.DLL
  • GoodApp.exe也取决于Core.DLL
版本7.0的

App.EXE需要版本7.0的Core.DLL。类似的,版本X的GoodApp将需要版本X的DLL。

由于DLL将由不同的应用程序共享,我已将DLL放入一些通用路径。这样可以避免将DLL粘贴到所有路径上。为此设置了一些\SharedDLL路径。并且(假设),我为此设置了PATH变量。 因此,当任何应用程序加载时,OS将只从这个公共路径加载Core.DLL。

一切都很好。但是如果App.exe是64位/ Debug或其他配置怎么办? common-DLL路径不能包含所有DLL(32/64,Debug / Release)。在类似的行上,版本Y的App.exe不能使用版本X的Core.DLL X> Y,或Y> X,但只是 X!= Y ,X版本的App不能使用版本Y的DLL。)

简而言之, App-32bit-Release-VersionX ,需要完全 DLL-32bit-Release-VersionX ,而不是别的!由于DLL名称相同,我不能将它们放在一个共同的路径中。而且,因为有许多依赖于Core.DLL的应用程序(以及DLL!),我只是不想浪费空间和时间将DLL复制到EXE的路径中。

是的,我使用post-build-setup将DLL适当地复制到所有路径中。这解决了时间,但浪费了空间。如果有新的应用程序,必须修改PBS以复制到新的路径。

问题是:如何利用Windows / MFC / CRT DLL使用的.manifest功能?他们确实利用WinSxS文件夹。

1 个答案:

答案 0 :(得分:1)