Как установить, какая версия среды выполнения VC ++ предназначена для Visual Studio 2005 - PullRequest
0 голосов
/ 20 апреля 2010

У меня есть приложение, которое содержит проект VC ++ (вместе с проектами C #). Ранее (то есть в течение последнего года или около того), когда сборка была выполнена, Visual Studio 2005, по-видимому, предназначалась для среды выполнения VC ++ версии 8.0.50727.762. По крайней мере, это то, что говорит мне файл Assembly.dll.intermediate.manifest:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

Этот номер версии соответствует номеру версии Visual Studio 2005. Приложение работало нормально при развертывании на веб-сервере. Солнце светило, птицы пели, и с миром все было в порядке.

Теперь что-то изменилось. Я не знаю, что - исправление безопасности, скрытая настройка Visual Studio или что-то в этом роде. Теперь Visual Studio 2005, похоже, ориентирован не на ту версию среды выполнения VC ++:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.4053' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

При развертывании приложения на веб-сервере я получаю страшную информацию Это приложение не удалось запустить из-за неправильной конфигурации приложения. Переустановка приложения может решить проблему. (Исключение из HRESULT: 0x800736B1) ошибка.

Эта проблема возникает, даже если я перекомпилирую предыдущие версии приложения. Я могу абсолютно гарантировать, что вообще ничего не изменилось в решении - мы заархивируем все содержимое решения как часть процесса сборки и заархивируем его. Я разархивировал некоторые из них во временный каталог, проверил, что предыдущий файл манифеста ссылается на 8.0.50727.762, перекомпилировал с использованием точно такой же команды в командной строке, а затем убедился, что новый файл манифеста теперь ссылается на 8.0.50727.4053.

Я использую Microsoft Visual Studio 2005 версии 8.0.50727.762 (SP.050727-7600) и Microsoft Visual C ++ 2005 77646-008-0000007-41610.

Почему Visual Studio возвращается к предыдущей версии среды выполнения VC ++? Как мне указать, какую версию он должен использовать? Что здесь не так?

Обновление

OMG - я такой идиот. Х.7> Х.4, но Х.762 <Х.4053, где Х - номер версии. Таким образом, 8.0.50727.4053 является <b>более свежим , чем 8.0.50727.762. Все это имеет смысл сейчас. Я оставляю это как личное напоминание на все времена, я думаю, что я самый умный человек в мире ...

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

Вероятно, произошло то, что ваша машина установила новое служебное обновление, которое обновляет среду выполнения VC ++. Ничего страшного, просто установите все необходимые обновления на свой веб-сервер, и все снова будет очень красиво.

Если вам действительно нужно вернуться обратно, то вам нужно будет найти и удалить обновление, которое изменяет библиотеку времени выполнения, невозможно изменить выбранную среду выполнения в версии 2005, она будет использовать самую последнюю и актуальную один он находит.

0 голосов
/ 07 мая 2010

Используйте _BIND_TO_CURRENT_XXX_VERSION 1 (где XXX - CRT / MFC / ATL / OPENMP), чтобы выбрать между VCRedist из VistualStudio RTM и последним в вашем устройстве разработчика.

http://msdn.microsoft.com/en-us/library/cc664727%28VS.90%29.aspx

PS: Не очень уверен, но с _BIND_TO_CURRENT_VCLIBS_VERSION сообщалось о проблемах, поэтому лучше использовать макрос для каждого MFC / ATL и т. Д.

...