Как выбрать решение 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
не указано, вместо этого я получаю два варианта:
Они соответствуют 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. Разработчики могут использовать любую версию, более новую, чем это, и все должно работать грамотно.