Как выбрать решение Visual Studio Платформа Набор инструментов для максимальной совместимости

Фон

Я открываю несколько старых приложений Visual Studio, которые я создал некоторое время назад. Я создал новые решения, используя для этого новую среду VS2012, и создал проекты, созданные как хранилища git. Я получил все, что отлично работает в Visual Studio 2012 без каких-либо изменений в исходном коде, все, что мне нужно было сделать, это убедиться, что я связываю правильные библиотеки в новых конфигурациях проекта.

Я хотел бы настроить эти проекты, чтобы иметь максимальную совместимость для других, загружающих проект из Github. На этой машине у меня есть VS2010, установленный вместе с последней версией VS2012. После того, как я получил все, что работает для обоих проектов в VS2012, я попытался открыть их в VS2010.

Когда я попытался построить, я получил одну ошибку:

Specified platform toolset (v110) is not installed or invalid.
Please make sure that a supported PlatformToolset value is selected.    
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets  518

Что я пробовал

Итак, я открыл свойства для проекта, перешел на Configuration Options --> General, а Platform Toolset действительно был установлен на Visual Studio 2012 (v110). Этот ввод представляет собой раскрывающийся список, а значение v110 не указано, вместо этого я получаю два варианта:

  • v100
  • v90

Они соответствуют VS2010 и VS2008 соответственно. Если я изменю значение на v100 и перестрою, я не получу никаких ошибок, и моя программа отлично работает в моей среде Visual Studio 2010.

Когда я открываю проект в Visual Studio 2012, если говорит мне, что у меня есть старый файл проекта и спрашивает, хочу ли я обновиться, я говорю "да" и он обновляется. Я перестраиваю и запускаю, чтобы убедиться, что все еще работает. Когда я открываю параметры конфигурации в VS2012, Набор инструментов для платформы устанавливается на "Visual Studio 2012" (v110), но при нажатии на выпадающий вход есть еще несколько вариантов:

  • Visual Studio 2012 (v110)
  • v110_wp80
  • Visual Studio 2012 - Windows XP (v110_xp)
  • Visual Studio 2010 (v100)
  • Visual Studio 2008 (v90)
  • & lsaquo; унаследовать от родительских или проектов defaults & rsaquo;

Мои вопросы

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

  • Если я не использую функции, специфичные для более новых версий Visual Studio, можно ли настроить решение, которое можно открыть и запустить без изменений в максимально возможном количестве версий (например, 2008, 2010, или 2012)? Если да, то как?

  • Если я установил Platform Toolset в v90 (VS2008) из Visual Studio 2012 и смог создать и запустить, означает ли это, что он будет создавать и запускать для пользователей с VS2012, VS2010 и VS2008?

  • Что именно делает опция <inherit for parent or project defaults>? Какими будут настройки проекта по умолчанию? Можно ли это использовать, чтобы сообщить Visual Studio, чтобы попытаться использовать в зависимости от того, какой из установленных Инструментов платформы будет работать.

  • Есть ли другие возможности помимо Platform Toolset в Visual Studio, которые я могу установить для повышения совместимости с другими средами разработки?

Ответ 1

Это несколько сложная ситуация. Одна из основных проблем здесь заключается в том, что VS2010 и VS2012 используют MSBuild для создания проектов на С++, но VS2008 вместо этого использовал VCBuild. Это можно увидеть, сравнив файлы проекта. VS2010/VS2012 использует .vcxproj, в то время как VS2008 использует .vcproj.

Если я не использую функции, специфичные для более новых версий Visual Studio, возможно ли создать решение, которое можно открыть и запустить без изменений в максимально возможном количестве версий (например, 2008, 2010, или 2012)? Если да, то как?

Для максимальной совместимости вы хотите настроить таргетинг на самый низкий общий знаменатель (т.е. vc90 в этом случае). Обратите внимание, что при обновлении файл решения и файлы проекта обновляются до последней версии, что может нарушить совместимость со старыми версиями Visual Studio.

Если я установил набор инструментов платформы для v90 (VS2008) из Visual Studio 2012, и он способен создавать и запускать, означает ли это, что это будет создавать и запускать для пользователей с VS2012, VS2010 и VS2008?

На самом деле, из-за конфликта .vcxproj/.vcproj, указанного выше.

Например, в настоящее время у меня есть набор файлов .vcxproj и решение, разработанное для VS2010. Я использую VS2012 в качестве моей IDE, поэтому, когда я открываю VS2010-решение в VS2012, я решил НЕ обновлять его и просто открывать его как есть. VS2012 и последующие должны быть обратно совместимы с VS2010, поскольку файлы проекта идут.

Для максимальной совместимости в средах разработки моя рекомендация будет использовать решение VS2010 в качестве базовой линии, ориентированное на v100. Разработчики могут использовать любую версию, более новую, чем это, и все должно работать грамотно.