Как без проблем разрабатывать как VC ++ 2010, так и VC ++ 2008 на одной и той же работе?

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

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

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




Ответы (9)


В моей компании у нас была точно такая же проблема, и мы решили использовать 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. < br> Но это того стоило бы даже для разных версий VS.

person Community    schedule 06.11.2009
comment
на самом деле это то, на что я согласился. Спасибо. - person KeatsPeeks; 27.08.2011

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

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

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

Я надеюсь, что это помогает.

person Yann Trevin    schedule 30.10.2009
comment
Помогло бы в C #, но файлы проекта C ++ нельзя объединить, поскольку макет полностью отличается от VC ++ 2008 до VC ++ 2010. Но идея хорошая. - person KeatsPeeks; 30.10.2009
comment
Ммм ... Я не видел, чтобы вы говорили о проектах VC ++, а не о проектах C #. Поэтому я не знаю, действительно ли мое решение применимо в вашем сценарии. - person Yann Trevin; 30.10.2009
comment
Думаю, это лучшая идея. Теперь мой вопрос сводится к «как я могу объединить файлы проекта vc9 и vc10». Я мог бы сделать это сам с помощью инструмента. - person KeatsPeeks; 30.10.2009

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

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

person GraemeF    schedule 27.10.2009
comment
Этот проект контролируется исходным кодом с помощью TFS, поэтому меня это очень интересует. Но я не понимаю, как я могу объединить изменения между проектом .vcproj (2008) и .vcxproj (VC ++ 2010). Как я могу этого добиться? - person KeatsPeeks; 28.10.2009
comment
Вы должны объединить изменения между ними так же, как и для любых других файлов в TFS. - person GraemeF; 03.11.2009

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

  • Невозможно ввести параметры конкретного проекта VS2010
  • Любые изменения в проекте VS2010 будут перезаписаны и не объединены обратно в VS20008.
person Community    schedule 31.10.2009
comment
Я думал об этом, но мне нужно сделать еще 2010- ›2008 - person KeatsPeeks; 02.11.2009

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

person Ilya Khaprov    schedule 27.10.2009

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

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

РЕДАКТИРОВАТЬ: Мой опыт в основном основан на схеме проекта C #, которая не сильно изменилась с течением времени. Как отметил TheSamFrom1984, в схеме C ++ есть некоторые большие изменения, которые не вошли в документации MSDN по версии 10 пока нет.

person Jeremy S    schedule 27.10.2009
comment
К сожалению, файлы проектов VC10 и VC9 полностью различаются. - person KeatsPeeks; 28.10.2009
comment
В последнее время у меня не было возможности напрямую работать с какими-либо файлами проекта VC ++, но схемы XSD, опубликованные MS, указывают на отсутствие изменений в структуре. В чем различия, которые вы видите? - person Jeremy S; 28.10.2009
comment
Например, файлы перечислены с помощью ‹VisualStudioProject› ‹Files› ‹Filter› ‹File› в vc9 и ‹Project› ‹ItemGroup› ‹ClCompile› в vc10. В diff отображается только одна общая строка: первая. - person KeatsPeeks; 28.10.2009
comment
Спасибо что подметил это. Я только что заметил, что опубликованная схема для VC10 в MSDN показывает Version = 9.00; Наверное, я должен был это уловить в первый раз. Мне придется более внимательно изучить фактические файлы XSD, когда у меня будет к ним доступ. Я также редактирую свой ответ, чтобы отметить несоответствие - person Jeremy S; 28.10.2009
comment
Если вы сделаете более точную разницу в файлах .vcproj (по слову, разделенному пробелами и знаками препинания в WinMerge или по символам), сможете ли определить заменяемый шаблон? - person Danny Varod; 03.11.2009
comment
@Danny Основываясь на том, что я узнал с тех пор, как впервые ответил, я думаю, что все сводится к сопоставлению отдельных элементов схемы между двумя версиями, а не к простому поиску и замене. - person Jeremy S; 03.11.2009

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

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

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

person Community    schedule 03.11.2009
comment
Я считаю, что идея заключается не столько в том, чтобы для компиляции исходных файлов можно было использовать другую версию компилятора, а в том, что разные разработчики проекта могут использовать любую из двух IDE, которые они имеют (или предпочитают). - person Michael Burr; 05.11.2009
comment
В прошлом IDE и версия компилятора были тесно связаны, поэтому для компиляции с VC8 вам требовался VS2k5, а для компиляции с VC9 вам нужен VS2k8 (сейчас у нас в офисе есть именно эта проблема). VS2010 позволит всем использовать VS2010 и по-прежнему стремиться к VC9 или VC8 вместо VC10. Я говорю: дайте всем 2010 и позвольте им сосредоточиться, а не поддерживать несколько IDE :) - person Jim Wallace; 05.11.2009

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

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

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

person Community    schedule 04.11.2009

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

person Community    schedule 05.11.2009
comment
Опять же, я не понимаю, как вы можете это сделать, поскольку вы НЕ МОЖЕТЕ объединить проекты vc9 и vc10. - person KeatsPeeks; 06.11.2009