我想在Visual Studio 2008下编译一个DLL,它依赖于msvcr90.dll作为私有程序集(基本上我将这个DLL转储到与我的应用程序相同的目录中),而不需要外部清单文件。
我按照http://msdn.microsoft.com/en-us/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>
我认为&lt; dependentAssembly&gt;线是导致它死亡的原因 清单文件丢失。有什么想法吗?
答案 0 :(得分:1)
将以下内容添加到预处理器定义中:
_CRT_NOFORCE_MANIFEST