Visual Studio 2005 - C ++ - Что управляет созданием манифеста
-
21-08-2019 - |
Вопрос
Я пытался выяснить, почему отладочная сборка завершалась ошибкой события "не удалось найти зависимую сборку microsoft.vc80.debugcrt".
После удаления всего (всего, что не .cpp или .h) и воссоздания решения - у меня все еще была проблема.
Поиск в Google оказался безрезультатным, и переустановка VS не привела к каким-либо изменениям.
У меня действительно были библиотеки DLL в C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c.
Я открыл файл \debug\.exe.intermediate.manifest, и в нем было 2 записи (dependentAssembly):
1 - й:имя='Microsoft.VC80.DebugCRT' версия= '8.0.50608.0'
2 - й:имя='Microsoft.VC80.DebugCRT' версия= '8.0.50727.762'
Если я удалю один и изменю другой на name= 'Microsoft.VC80.DebugCRT' version='8.0.50727.42'
Я могу получить сборку, которая запустится.
Конечно, у меня действительно был установлен VS2008 - но что контролирует версии ?или как я могу получить правильную версию debug dll для "stick".
VS2008 был деустановлен через панель управления.
Редактировать:Ничего не найдено в реестре, если выполняется поиск DebugCRT .
путь к среде указывает на папки VS8 .
Есть только 1 папку DebugCRT в c:\windows\winsxs\policies папка
(8.0.50.727.42)
В папке c:\windows\winsxs\manifests есть только .42 версии .cat и .manifest
Файл .manifest (в указанной выше папке manifest) имеет версию="8.0.50727.42".
Разъяснение:файл манифеста содержит 2 записи "dependentAssembly", каждая из которых имеет разные версии, а не .42.Я могу удалить 1 запись и изменить версию другой, чтобы она соответствовала .42, чтобы получить запускаемую отладочную сборку.
EDIT2: Я также использую boost, и внутри DLL-файлов есть версия .762
Решение
Версия была взята из Boost DLL, которые представляли собой загруженную, предварительно скомпилированную версию Boost.Как только библиотеки были повторно скомпилированы (и переустановлены), повторная сборка решения привела к созданию манифеста с единственной версией, а программа была связана и запущена.
Итак, проверьте библиотеки и DLL, импортированные в решение, на предмет используемой версии.
Другие советы
VS 2008 - это VC90, а не VC80, так что это не часть проблемы.Связь между сборкой, запрошенной в манифесте, и сборкой, загруженной в SxS, найдена в C:\WINDOWS\WinSxS\Policies .IIRC, "8.0.50608.0" генерируется VS2005 до версии SP1.Это неправильно, и должно было быть 8.0.50727.42, но это фиксируется политикой.
Я не уверен, как вы получаете два манифеста.Каковы ваши настройки манифеста?
Я бы предложил перестроить Boost в вашей конкретной среде.Кроме того, вы могли бы полностью отказаться от параллельных сборок, статически связав ЭЛТ...