如何编译不需要外部清单文件的DLL?
时间:2020-03-06 14:19:57 来源:igfitidea点击:
我想在Visual Studio 2008下编译依赖于msvcr90.dll的DLL作为私有程序集(基本上,我将把该DLL转储到与应用程序相同的目录中),而无需外部清单文件。
我按照http://msdn.microsoft.com/zh-CN/library/ms235291.aspx中概述的步骤进行操作
部分"将Visual C ++库DLL部署为私有程序集",但
而不是使用外部清单文件(即
Microsoft.VC90.CRT.manifest)我想以某种方式将其嵌入DLL。
如果我将Microsoft.VC90.CRT.manifest嵌入msvcr90.dll或者加载它的DLL中,并删除外部清单文件,则LoadLibrary()失败。
问题是,当我们将清单嵌入到DLL中时,它实际上会嵌入以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"> </requestedPrivileges> </security> </trustInfo> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"> </dependentAssembly> </dependency> </assembly>
我认为<dependentAssembly>行是导致它死亡的原因,如果
清单文件丢失。有任何想法吗?
解决方案
将以下内容添加到预处理器定义中:
_CRT_NOFORCE_MANIFEST