У меня есть только что установленный компьютер для разработки с Windows 7 и Visual Studio 2010, Service Pack 1.
В нашем решении у нас есть C ++ DLL, которая используется несколькими приложениями.
В конфигурации выпуска все работает нормально, но в конфигурации отладки я получаю диалоговое окно с сообщением об ошибке, что приложение не может запуститься правильно, когда я пытаюсь запустить одно из приложений.
Я выяснил, что это проблема с конфигурацией SxS в нашей C ++ DLL. По некоторым причинам манифест библиотеки DLL содержит следующую ссылку:
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
И на моей машине не установлена отладочная версия библиотек времени выполнения VC90.
Поскольку у нас были некоторые похожие проблемы, прежде чем мы всегда следили за тем, чтобы используемые нами внешние библиотеки компилировались с той же версией VS, которую мы используем для разработки.
Но похоже, что где-то есть ссылка на DebugCRT VC90. Я попытался выяснить это с помощью Dependency Walker и PeStudio в наших внешних библиотеках, но нигде не смог найти ссылки на VC90 DebugCRT Dll.
Я на самом деле исправил проблемы, отключив создание файла манифеста в настройках компоновщика нашего Dll. Таким образом, DebugCRT VC90 фактически не требуется для запуска приложения, но все равно каким-то образом загружается.
Мне просто стало интересно, как VS определяет в процессе сборки, какие ссылки включить в файл манифеста и как я могу диагностировать, откуда эта ссылка?