Вопрос

Я пытался выяснить, почему отладочная сборка завершалась ошибкой события "не удалось найти зависимую сборку 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 в вашей конкретной среде.Кроме того, вы могли бы полностью отказаться от параллельных сборок, статически связав ЭЛТ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top