Visual Studio 2005 - C ++ - Что управляет созданием манифеста

Я пытался выяснить, почему сборка отладки взорвалась с ошибкой события «зависимая сборка microsoft.vc80.debugcrt не может быть найдена».

После удаления всего (ничего, кроме .cpp или .h) и воссоздания решения проблема все еще была.

Поиск в Google оказался бесплодным, и переустановка VS не дала никаких изменений.

У меня были библиотеки в C: \ WINDOWS \ WinSxS \ x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c.

Я открыл файл \ debug \ .exe.intermediate.manifest, и в нем было 2 записи (зависимая сборка):
1-я: name = 'Microsoft.VC80.DebugCRT' version = '8.0.50608.0'
2-я: name = Версия 'Microsoft.VC80.DebugCRT' = '8.0.50727.762'

Если я удалю один и изменю другой на name = 'Microsoft.VC80.DebugCRT' version = '8.0.50727.42'

Я могу получить сборку, которая запустится.

Конечно, у меня был установлен VS2008, но что контролирует версии? или как мне "прилепить" нужную версию отладочной dll.

VS2008 был деинсталлирован через панель управления.

РЕДАКТИРОВАТЬ: ничего не найдено в реестре, если выполняется поиск DebugCRT.
путь к среде указывает на папки VS8.
В папке c: \ windows \ winsxs \ policy есть только 1 папка DebugCRT
(8.0 .50.727.42)
В папке c: \ windows \ winsxs \ manifestests есть только .42 версия файлов .cat и .manifest
Файл .manifest (в указанной выше папке манифеста) имеет version = "8.0.50727.42 "

Уточнение: в файле манифеста есть 2 записи «зависимой сборки», каждая с разными версиями, а не .42. Я могу удалить одну запись и изменить версию другой, чтобы она соответствовала .42, чтобы запустить отладочную сборку.

EDIT2: я также использую boost, а внутри DLL есть версия .762


person jim    schedule 24.03.2009    source источник


Ответы (3)


Версия была взята из DLL Boost, которые были загружаемой предварительно скомпилированной версией Boost. После повторной компиляции (и повторной установки) библиотек при повторной сборке решения был получен манифест с единственной версией, а программа была скомпонована и запущена.

Итак, проверьте библиотеки и библиотеки, которые импортируются в решение, на предмет используемой версии.

person jim    schedule 24.03.2009

VS 2008 - это VC90, а не VC80, так что это не часть проблемы. Связь между сборкой, запрошенной манифестом, и ассемблированной загрузкой SxS находится в C: \ WINDOWS \ WinSxS \ Policies. IIRC, "8.0.50608.0" генерируется VS2005 до SP1. Это неправильно, и должно было быть 8.0.50727.42, но это улавливается политикой.

Не знаю, откуда у вас два манифеста. Каковы ваши настройки манифеста?

person MSalters    schedule 24.03.2009

Я бы предложил перестроить Boost в вашей конкретной среде. Кроме того, вы можете полностью отказаться от сборок Side by Side, статически связав CRT ...

person Community    schedule 25.03.2009
comment
Ага, я сделал это, но меня укусил MFC, не желающий связываться. Я хочу заменить классы принтеров MFC и полностью сбросить MFC. - person jim; 25.03.2009