Неверная конфигурация Side-by-Side из-за неправильного манифеста

Я изначально задал этот вопрос на форуме libRocket, но учитывая, что дальнейшее расследование показало, что это скорее общая проблема, связанная с C++/Visual Studio, я спрашиваю здесь.

Я использую Visual Studio C++ 2010 Express и скачал полный Win32 исходный код libRocket 1.2.1. Я успешно скомпилировал его в режиме отладки без ошибок и предупреждений и теперь пытаюсь заставить его работать в моем приложении, которое построено на базе SFML 1.6.

Мое приложение компилируется без ошибок и предупреждений с перекомпилированной libRocket. Однако, как только я пытаюсь запустить его, я получаю сообщение об ошибке Приложение не удалось запустить правильно (0xc0150002). Нажмите OK, чтобы закрыть приложение.

Когда я открываю свой исполняемый файл с помощью Dependency Walker, я получаю следующую ошибку:

Ошибка: Информация о конфигурации Side-by-Side для "ROCKETCORE_D.DLL" содержит ошибки. Приложение не удалось запустить, потому что его конфигурация side-by-side неверна.

Я нахожу это странным, потому что это также показывает, что и мое приложение, и RocketCore_d.dll зависят от MSVCP100D.DLL и MSVCR100D.DLL. Никакого несоответствия там нет. Затем я выполнил sxstrace:

=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = Wow32
    CultureFallBacks = en-US;en
    ManifestPath = Binaries\Debug\RocketCore_d.dll
    AssemblyDirectory = Binaries\Debug\
    Application Config File = 
-----------------
INFO: Parsing Manifest File Binaries\Debug\RocketCore_d.dll.
    INFO: Manifest Definition Identity is (null).
    INFO: Reference: Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
INFO: Resolving reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8".
    INFO: Resolving reference for ProcessorArchitecture WOW64.
        INFO: Resolving reference for culture Neutral.
            INFO: Applying Binding Policy.
               INFO: No publisher policy found.
                INFO: No binding policy redirect found.
            INFO: Begin assembly probing.
                INFO: Did not find the assembly in WinSxS.
                INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.
                INFO: Did not find manifest for culture Neutral.
            INFO: End assembly probing.
    INFO: Resolving reference for ProcessorArchitecture x86.
        INFO: Resolving reference for culture Neutral.
            INFO: Applying Binding Policy.
                INFO: No publisher policy found.
                INFO: No binding policy redirect found.
            INFO: Begin assembly probing.
                INFO: Did not find the assembly in WinSxS.
                INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.
                INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT.DLL.
                INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT.MANIFEST.
                INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL.
                INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST.
                INFO: Did not find manifest for culture Neutral.
            INFO: End assembly probing.
   ERROR: Cannot resolve reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8".
ERROR: Activation Context generation failed.
End Activation Context Generation.

Похоже, что в моей системе отсутствует среда выполнения Visual Studio 2008. Правильно ли это? Версия 9.0.21022 дистрибутива VS2008 на самом деле присутствует в моей системе. Но даже в этом случае, учитывая, что я перекомпилировал libRocket с помощью VS2010, разве он не должен ссылаться на среду исполнения VS2010?

Я полагаю, что эта ошибка связана с конфигурацией в файле манифеста вновь скомпилированного libRocket:

    
          
    

Я понимаю, откуда она берется, поскольку приложение изначально было написано для VS2008, но как я могу заставить VS2010 генерировать правильный манифест? В свойствах проекта указано, что он генерируется автоматически.

Обратите внимание, что эта проблема возникает только в режиме отладки, в релизе все работает нормально. Конечно, я бы очень хотел иметь возможность запускать его в режиме отладки на моей системе разработчика.

Любые указания на то, как решить эту проблему, будут очень признательны!

Спасибо!

14
задан Peter O. 29 December 2011 в 06:47
поделиться