Когда я запускаю исполняемый файл, который я создал, я получаю следующую ошибку:
Система не может выполнить указанную программу
Я сразу подумал, что это проблема зависимости с одной из перераспределяемых библиотек VC8.0 (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, от которой мое приложение зависит от того, будет ли оно создано на другом ПК с другим набором распространяемых библиотек DLL, но я хочу это подтвердить.
Обновление:
Я перепробовал множество предложений в этом блоге , но без особой удачи. Одна странная вещь состоит в том, что манифест, сгенерированный, когда я делаю сборку Release, не включает запись 8.0.50727.4053, но сборка Debug включает.