Как беспрепятственно развиваться в VC++ 2010 и VC++ 2008 на одной и той же работе?

Я хотел бы синхронизировать проект VC++ 2010 с проектом VC++ 2008. Это вообще возможно? По сути, если я добавляю/удаляю/переименовываю файл в проект в VS2010, я бы хотел, чтобы он был добавлен/удален/переименован в соответствующий проект VS2008. Синхронизация параметров проекта тоже была бы потрясающей, но не обязательной. Мне также не нужна синхронизация на уровне решения.

Мне предложили "объединить" файлы проекта при регистрации или сборке с помощью скрипта или инструмента. К сожалению, формат файла проекта VC++ изменился с VS2008 на VS2010 и не имеет ничего общего.

Есть ли инструмент, способный объединять/конвертировать файлы проекта vc9 и vc10? Я мог бы написать свой собственный инструмент, если нет другого способа решить эту проблему.

Ответ 1

В моей компании у нас была такая же проблема, и я решил использовать CMake.

По крайней мере, попробуйте в одном из ваших проектов, это идеальное решение для вашей проблемы.

Он позволяет описывать наши проекты с помощью простого синтаксиса в текстовых файлах, а затем CMake генерирует проекты VS2005, VS2008 и VS2010 из тех же файлов.
Таким образом, только файлы Cmake изменяются, и все проекты обновляются одновременно.

Короче CMake:
 1. чистый
 2. описательный
 3. родной
 4. безопасный

Потому что:
 1. Все параметры и конфигурации можно прочитать в файлах, а не во многих панелях свойств.
 2. Грамматика и синтаксис CMake легко читаются.
 3. Все сгенерированные проекты полны и независимы от CMake.
 4. Вы можете использовать диспетчер управления версиями в файлах CMake.

У нас было несколько решений по 50 проектам или 20 проектам, и это была большая работа, и одна из причин, по которой мы использовали CMake, заключалась в том, что нам нужно было работать с Xcode на Mac в некоторых библиотеках, проекты которых теперь распространены для VS и Xcode.
Но это стоило бы даже для разных версий VS.

Ответ 2

Проект Gallio OSS построен с использованием VS2010, в то время как большинство участников все еще используют VS2008. Чтобы файлы *.csproj синхронизировались с файлами *.vs2010.csproj, мы используем простой PowerShell script, который запускает WinMerge для каждой пары файлов проекта. Ничего сложного, но очень удобного.

Вы можете загрузить script в Google Code. Чтобы запустить его, просто введите следующую команду:

@echo off
powershell "& './Compare VS2010 Projects.ps1' -sync %*"

Надеюсь, это поможет.

Ответ 3

Здесь поддерживается управление версиями. Я сделал это раньше с предыдущими версиями, создав обновленную ветку (VS2010) и объединив изменения между ней и магистралью (VS2008). Несмотря на то, что он не является бесшовным, он работает.

Я не знаю, изменится ли проект в VS2010, сделав его лучше или хуже, чем раньше!

Ответ 4

Я считаю, что это вариант командной строки для переноса файла проекта VS2008 на VS2010. Таким образом, вариант должен состоять только в том, чтобы поддерживать VS2008 и регенерировать VS2010-проекты. Недостатками являются

  • Невозможно ввести конкретные параметры проекта VS2010.
  • Любые изменения в проекте VS2010 будут перезаписаны и не будут объединены с VS20008.

Ответ 5

Вы можете поддерживать только эти файлы решений/проектов отдельно. если вы напишете свое дополнение, пожалуйста, дайте мне знать!

Ответ 6

У меня нет 2010 установленного на работе, поэтому я собираюсь в основном из памяти здесь. Очень мало было изменений в схеме файла проекта с 2005 по 2008 год до 2010 года. По большей части я просто использую инструмент сравнения текста, такой как WinDiff или BeyondCompare, чтобы выделить изменения и скопировать их из одного файла в другой. Я не играл ни с одним из типов веб-проектов, но я предполагаю, что по большей части будет работать тот же метод. С их основной схемой XML вы также можете использовать инструмент сопоставления XML для выполнения той же работы.

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

EDIT: Мой опыт в основном основан на схеме проекта С#, которая со временем не сильно изменилась. Как отметил TheSamFrom1984, в схеме С++ есть некоторые большие изменения, которые еще не вошли в документацию MSDN на версию 10.

Ответ 7

Visual Studio 2010 поддерживает мультитаргетинг, который позволит вам разрабатывать VS2010 и понижать инструменты платформы до V9, чтобы вы могли использовать новейшие инструменты для поддержки старого проекта. Почему бы просто не сделать это?

Он поставляется с VS2010 и VS2008 для С++ из коробки, вот некоторая информация о настройке инструментальной линейки VS2005

http://weblogs.asp.net/israelio/archive/2009/10/20/enable-vs-2010-multi-targeting-also-for-vs2005-c.aspx

Ответ 8

Я сделал именно это, когда VS 2008 вышел, и мы оценивали его, пока остальная часть команды использовала VS 2005. Я не хотел фиксировать какие-либо из файлов проекта нового формата, поскольку это нарушит его остальная часть команды, поэтому я написал небольшую script в ruby, которая просто искала все файлы .vcproj и переименовала их в _2008.vcproj. Я сделал то же самое и для файлов .sln, но также искал ссылки на .vcproj в файлах sln и переименовал их в _2008.vcproj, чтобы ссылаться на новые проекты.

Затем просто загрузите новые файлы решений и дайте мастер миграции выполнить свою задачу (я полагаю, что VS 2010 имеет такую ​​же, как и старые версии). Это позволяет запускать обе версии бок о бок. Если кто-либо еще из команды вносит какие-либо изменения в старый файл проекта, просто перезапустите конверсию, а затем мастер должен просто перенести измененный проект.

В дальнейшем вам нужно будет добавить в script, который должен изменить поля OutputDirectory и IntermediateDirectory в файле vcproj, чтобы вы также создавали разные каталоги. Если вы это сделаете, это значит, что вы должны иметь возможность создавать с любой версией Visual Studio в одном исходном дереве.

Ответ 9

Вы должны рассматривать копию VS2010 как ветвь. Каждые пару дней и при каких-либо серьезных изменениях (Конечно, прохождение тестов проходит, конечно), слияние изменений в другой филиал. Это широко принятая и принятая практика в корпоративных программных средах.