MSVCR90D.dll не найден в режиме отладки с Visual С++ 2008
У меня проблема с Visual С++ 2008. Я установил opencv, и я создал новую программу, и я создаю ее без ошибок. Однако он жалуется на то, что не обнаружил MSVCR90D.dll при отладке. В режиме выпуска нет никаких проблем.
У меня есть MSVCR90D.dll в одной из папок Winsxs. Кто-нибудь знает, как справиться с этой проблемой? Это известная ошибка?
Джерард
Ответы
Ответ 1
Существует несколько потенциальных решений, описанных в этом сообщении . Посмотрите, поможет ли кто-нибудь из них.
Один намек оттуда:
Переход на% System Drive%\Windows\WinSxS и найдите каталог x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456
Если этого не существует, перейдите к VS настройки и убедитесь, что у вас есть все библиотеки, установленные под VС++.
И еще один:
У меня была такая же проблема, но она была исправлена отключением инкрементной привязки (Свойства проекта... Линкер... Общие... Включить инкрементную привязку: Нет).
Подтверждение последнего:
Проекты, построенные на программном диск жалуется на отсутствие MSVCR90D.dll. Проблема уходит если вы отключите инкрементную привязку (и, конечно, перестроить все).
Ответ 2
С той же проблемой я нашел сообщение, которое привело меня к отладке DLL в установке VS9.0. Для установки по умолчанию они находились в: C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT
.
Существует три библиотеки DLL и файл манифеста. Вы можете добавить их в свой каталог System32
, добавить каталог в переменную среды PATH
или скопировать файлы в тот же каталог, что и ваш исполняемый файл, при отладке.
Инкрементное связывание ускоряет ваши сборки (компоновщик только повторно связывает библиотеки, которые изменились вместо повторной привязки всего проекта). В противном случае это не влияет на вывод сборки. Для большого проекта я бы не рекомендовал отключать инкрементную привязку.
Ответ 3
Была та же проблема, хотя другой проект VC9.0 преуспел. Поэтому я сравнил обе настройки проекта.
Ключевое различие было в разделе "Свойства проекта" → "Свойства конфигурации" → "Инструмент манифеста" → "Ввод и вывод" → "Вставить манифест". Этот параметр должен быть установлен на YES.
Ответ 4
Проблемы с загрузкой DLL намного проще с Dependency Walker. Он позволяет вам профилировать ваше приложение, ловя обе библиотеки DLL, загруженные при запуске, и библиотеки DLL, загруженные позже. Он выплюнет много сообщений, связанных с загрузкой DLL, или с невозможностью их загрузить. Он также понимает загрузку DLL через SxS.
Вы можете передать EXE в качестве аргумента в Depends.EXE, и он будет профилировать это приложение. Это можно комбинировать с большинством IDE. Например, в Visual Studio вы можете установить команду "Команда для отладки". По умолчанию это ваш собственный EXE. Измените его на depend.EXE и установите аргументы команды (по крайней мере) /pb your.debug.exe
.
Ответ 5
Перекомпилируйте свой проект в VС++ 2008 с помощью функции File- > New- > Project из существующего кода.
Это помогло мне, возможно, это поможет вам. С наилучшими пожеланиями.
Ответ 6
Я решил такую же проблему, как ниже:
- Выберите проект, щелкните правой кнопкой мыши и откройте страницу свойств.
- Выберите Свойства конфигурации.
- Выберите C/С++ из списка.
- Выберите генерацию кода.
- Посмотрите список свойств слева и посмотрите свойство Runtime Library.
- Выберите Многопоточность Debug вместо многопоточной DLL.
Когда вы это делаете, ваш проект встраивает зависящие DLL, и поэтому он избежал проблем с зависимостями.
Примечание. Я работал над проектом dll и имел эту проблему. После выполнения шагов он работал для моей ситуации.
Ответ 7
Это одна из причин, по которой я статически связываю; больших EXE, но у меня никогда не было проблемы с зависимостью, как это раньше. Наверное, стоит вопрос сам по себе, хотя...
Ответ 8
Я не могу дать окончательное решение, но вот некоторые полезные ссылки:
И, конечно же, в MSDN гораздо больше, если вы следуете ссылкам.
Ответ 9
У меня была проблема:
Не удалось загрузить файл или сборку "AudioInterface, Version = 1.0.3548.29920, Culture = neutral, PublicKeyToken = null" или одну из его зависимостей. Это приложение не удалось запустить, поскольку конфигурация приложения неверна. Переустановка приложения может решить проблему. (Исключение из HRESULT: 0x800736B1)
AudioInterface было именем моего проекта на С++.
Переключившись на конфигурацию "Отпустить", все сработало.
Я проследил его с отсутствием файла манифеста вместе с моей DLL, который я также отслеживал с установкой Assembly Identity. (Свойствa > Инструмент манифестa > Общие > Идентификатор сборки)
Я удалил эту настройку, и манифест упал в нужном месте, и все сработало.
Ответ 10
Я попробовал все предлагаемые решения без везения. Наконец, я обнаружил, что манифест отсутствует в папке "C:\WINDOWS\WinSxS\Manifests"
.
Найдите папку в C:\WINDOWS\WinSxS
, где находится ваша dll. Проверьте, есть ли манифест в C:\WINDOWS\WinSxS\Manifests
, который соответствует имени папки вашей DLL. Если манифест отсутствует, скопируйте правильный манифест с другого компьютера и вставьте его в папку манифеста. Имена файлов манифеста:
"x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.cat"
"x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.manifest"