Подтвердить что ты не робот

Visual С++ 2010: изменения в развертывании среды MSVC (не более SxS с манифестом)

Где я могу найти официальную заметку, статью kb или другую документацию, описывающую изменения политики компоновки и развертывания среды исполнения Visual Studio 2010?

В Visual Studio 2008 (с временем выполнения VC90) манифест был встроен в собственные изображения, а библиотеки времени выполнения были развернуты как сборочные сборки (WinSxS). Это вызвало проблемы при восстановлении родного exe или библиотеки с использованием VS 2008 SP1, поскольку обновленная версия среды выполнения С++ требовалась встроенным манифестом.

Для версии VS 2010 и версии среды MSVCR100 политика, похоже, полностью изменилась.

  • Файл msvcr100.dll и другие библиотеки времени исполнения C/С++ больше не устанавливаются в виде сборок SxS.
  • При компиляции под VS2010 во встроенный манифест добавляется запись "зависимость" runtime, что означает, что любая версия msvcr100.dll может быть загружена во время выполнения.
  • На компьютерах с установленным .NET 4 соответствующая среда выполнения называется msvcr100_clr0400.dll и не будет загружаться с помощью собственного кода, хотя копия, переименованная в msvcr100.dll, отлично работает. Я думаю, что это означает, что любой процесс с кодом C/С++ всегда будет иметь две версии одной и той же загрузочной среды C/С++.

Это, по-видимому, значительное изменение в политике, откат от развертывания SxS и манифеста, которые мы имели под VS 2008. Может ли кто-либо проливать больше света на то, что изменилось, и, возможно, указать на некоторую документацию, сообщение readme или blog, которое описывает эти изменения, мотивация и связанное с этим воздействие?

Думаю, что так лучше - сильная версия манифеста и развертывание SxS - это кошмар, но я удивлен этими неожиданными и, казалось бы, недокументированными изменениями в VS 2010.

Бонусный вопрос: Как я могу скомпилировать мою библиотеку С++/CLI в VS 2010 для ссылки на msvcr100_clr0400.dll вместо msvcr100.dll? Эта идея состоит в том, что сборка С++/CLI должна выполняться без зависимостей, отличных от установленных .NET 4 (без статической привязки).

4b9b3361

Ответ 1

Вы уже ответили на весь свой вопрос, параллельное развертывание ЭЛТ было кошмаром, который вызвал слишком много проблем программистов. Microsoft согласилась и отказалась от него для выпуска VS2010. Вернемся к DLL в c:\windows\system32 с именем msvcr100.dll. И msvcp100.dll, vcomp100.dll, atl100.dll, mfc100.dll, mfcm100.dll, другие библиотеки DLL. Как это было для VS2003 и более ранних выпусков. Теперь опять-таки задача пользователя решить проблему DLL Hell. Человек, наименее вероятно, сможет это сделать, но у них, как правило, есть бюджет для оплаты поддержки. В отличие от программистов, которым необходимо получить помощь со свободного веб-сайта:)

Но вы можете помочь, локальное развертывание приложений теперь снова включено, вы можете развернуть msvcr100.dll в том же каталоге, что и ваш основной EXE. Это было явно проверено и запрещено в предыдущих версиях. У App-local есть некоторые тонкости, это изолирует вас от хорошо продуманных, но неудачных обновлений, которые нарушают ваше приложение. Хотя теперь вы сами несете ответственность за получение обновлений, которые исправляют дыру в безопасности. Если это неудобно, тогда развертывайте и полагайтесь на копию в системном каталоге.

Не пытайтесь ссылаться на msvr100_clr0400.dll, что является частной копией для использования CLR. Подобно msvcr.dll, это частная копия для использования библиотеками Microsoft. У вас нет файла .lib, который необходимо связать с этими DLL.