По умолчанию для Visual Studio 2008 используется привязка к версии 9.0.21022.8.Это независимо от того, какую версию пакета обновления или исправления вы установили, поскольку обновления Visual Studio не обязательно должны приводить к необходимости обновления вашего приложения (как описано здесь ).
Возможно другоеверсии: 9.0.30729.1 для пакета обновления 1 или 9.0.30729.6161 для пакета обновления 1 с обновлением безопасности.Есть и другие.
Из-за поведения по умолчанию вполне вероятно, что ваше приложение использует 9.0.21022.8, и есть библиотека, которая была скомпилирована для использования 9.0.30729.1.Вы можете узнать, от какой версии каждой библиотеки зависит, используя следующую командную строку (, описанную здесь ):
dumpbin /directives <name>.lib
Для управления версией времени выполнения, к которому привязано ваше приложение, вы можете определить символы препроцессора в настройках вашего проекта (должны быть в настройках проекта или в командной строке) для привязки к версии по умолчанию (9.0.21022.8 - не определяя их) или для привязки к та же версия , что и у установленной Visual Studio:
_BIND_TO_CURRENT_VCLIBS_VERSION=1
Очевидно, вы также можете указать точную версию, к которой хотите привязаться, используя определения из этого ответа (возможно, я должен был найти это, прежде чем печатать все это:).
Если вы обнаружите, что ваше приложение привязано к 9.0.30729.1, а зависимая библиотека привязана к 9.0.21022.8, то вам просто нужно удалитьопределение препроцессора.
Другая трудность заключается в том, что при обновлении Visual Studio модули слияния во время выполнения в yoРаспространяемая папка также обновляется до этих версий.Поэтому, если у вас есть проект установки, использующий эти модули слияния, и вы пытаетесь привязать его к версии по умолчанию, вы в конечном итоге установите новые версии сред выполнения.
Разрешение версии времени выполнения не будет проблемой, еслиВы также распространяете модули слияния политики времени выполнения, так как загрузчик библиотеки во время выполнения будет смотреть на политику вашего времени выполнения и автоматически загружать самую новую версию, даже если вы привязываетесь к версии по умолчанию.Даже при закрытых сборках загрузчик сначала заглянет в папку WinSxS , поэтому при наличии политик вы будете привязаны к самой новой версии.Таким образом, смешанные номера версий в манифесте будут перенаправлены на самую новую версию.
Иногда это нежелательно, и вы можете контролировать это, чтобы заставить его загружать только версию в указанном вами манифесте, что объясняетсяв ответ на этот похожий вопрос .