Как Visual Studio создает ссылки на сборки внутри файлов манифеста для проектов C ++? - PullRequest
1 голос
/ 24 марта 2011

У меня есть только что установленный компьютер для разработки с 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 определяет в процессе сборки, какие ссылки включить в файл манифеста и как я могу диагностировать, откуда эта ссылка?

1 Ответ

0 голосов
/ 24 марта 2011

Сначала проверьте типичные проблемы, такие как «Properties / C ++ / Generation Code / Runtime lib» и убедитесь, что «_DEBUG» не определен для приложения и библиотек, от которых вы зависите.Если это не находит его, включите многословную ссылку «Linker / General / Show Progress» и посмотрите, говорит ли она вам, что он ищет в отладочной версии.

...