虽然我很确定 Christopher 的答案和代码示例(谢谢,Christopher!)是一个更优雅的解决方案的一部分,但我们迫不及待地想把它排除在外,并找到了一个非常相似但不同的解决方案。
第一步是为程序集创建清单:
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
接下来,您必须在 Configuration Properties -> Linker -> Manifest File 下将“Generate Manifest”选项设置为“No”,并在 Configuration Properties -> Manifest Tool -> Input and Output 下将“Embed Manifest”选项设置为“No” .
最后,要将您的新清单添加到程序集中,请将以下命令添加到项目的构建后步骤:
mt.exe /manifest "$(ProjectDir)cppassembly.dll.manifest" /outputresource:"$(TargetDir)\cppassembly.dll";#2 -out:"$(TargetDir)\cppassembly.dll.manifest"
构建完成后,我们可以在 Visual Studio 中打开 dll 以查看 RT_MANIFEST 下的清单并确认它有我们的清单!
当我将 Christopher 的代码放入 stdafx.h 时,它最终将其添加为附加依赖项……清单仍在寻找 v8.0.50727.762。它生成的清单如下所示:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
我无法找到另一个可以删除或清除现有依赖项的开关。我更喜欢 Christopher 的方法,而不是构建后的步骤,但现在这可行。如果有人对如何清除任何现有的依赖项有任何额外的意见,那就太好了。
谢谢!