当我运行我构建的可执行文件时,我收到以下错误:
系统无法执行指定程序
我的直接想法是,这是一个 VC8.0 可重新分发的 DLL(msvcr80d.dll
等)的依赖问题。这些 DLL 的补丁版本会影响我们的程序,我们遇到了一些问题。
当我在 Dependency Walker 下打开我的可执行文件时,会显示以下错误:
Error: The Side-by-Side configuration information in "w:\MYPROGRAM.EXE.manifest"
contains errors. This application has failed to start because the
application configuration is incorrect. Reinstalling the application may
fix this problem (14001).
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export
function in a delay-load dependent module.
如果我打开可执行文件的清单文件,其中包含以下内容:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.4053' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
它似乎有 2 个Microsoft.VC80.DebugCRT
依赖程序集的副本。
程序集的8.0.50727.4053
版本不在我的并行配置中(我相信这个版本附带了一个未安装的 Visual Studio 补丁)。
如果我从清单文件中删除此程序集,则可执行文件运行良好。
但是,当我重新构建应用程序时,会重新生成清单并再次添加额外的依赖项。
是什么导致将此依赖项添加到清单中?我猜它与另一个 DLL 有关,我的应用程序依赖于在另一台 PC 上使用不同的可重新分发 DLL 构建,但我想确认这一点。
更新:
我已经尝试了这篇博文中的很多建议,但运气不佳。奇怪的一件事是,当我进行 Release 构建时生成的清单不包含 8.0.50727.4053 条目,但 Debug 构建包含。