Создание нескольких версий проекта в Visual Studio с помощью конфигураций сборки.

Мне нужно создать несколько версий моего проекта, используя конфигурацию, как мы это делаем с #define, #if, #endif.

Недостатком использования этих директив препроцессора является то, что мне нужно определить символы почти в каждом файле проекта, но я хочу справиться с этим с помощью моих конфигураций сборки.

Я даже не уверен, помогут ли мне в этом Build Configurations.

Что я хочу, так это то, что если я создам конфигурацию с именем «Разработка» и другую с именем «QA», мой код будет выглядеть так:

if #Development or if $QA

Пожалуйста, направьте меня к достижению этого.


person MegaMind    schedule 10.04.2012    source источник


Ответы (2)


Диспетчер конфигураций существует по этой причине.

  • Перейдите в диспетчер конфигураций и создайте копию новой конфигурации из предопределенной конфигурации DEBUG.
  • Назовите конфигурацию РАЗРАБОТКА и примените ко всем проектам.
  • Выберите в качестве активной конфигурации конфигурацию РАЗРАБОТКИ (она уже должна быть активной)
  • Перейдите на страницу свойств каждого проекта, требующего #if DEVELOPMENT условной компиляции, и вставьте символ РАЗРАБОТКА в первое текстовое поле вкладки СТРОЙКА.

Теперь каждый из ваших проектов может использовать директиву препроцессора #if DEVELOPMENT.

Если вам это нужно также для RELEASE, повторите описанные выше шаги, но скопируйте из предопределенной конфигурации RELEASE и дайте другое ИМЯ.

Теперь переход от конфигурации с определенным символом РАЗРАБОТКА или без него можно было выполнить непосредственно из комбинированного инструмента «Конфигурации решений», присутствующего на стандартной панели инструментов Visual Studio, без редактирования каждого проекта.

Вы также можете просмотреть статью MSDN Как создавать и редактировать конфигурации

person Steve    schedule 10.04.2012
comment
Спасибо, Стив, зачем мне копировать мои конфигурации из предопределенных конфигураций? - person MegaMind; 10.04.2012
comment
Поскольку конфигурация DEBUG содержит настройки, необходимые во время сеанса DEBUG, то и для конфигурации RELEASE (например, символы DEBUG и TRACE). Если вы начнете с нуля, вы рискуете потерять функциональность, обеспечиваемую отсутствующими символами. - person Steve; 10.04.2012
comment
Я не уверен насчет 3-го шага, уточните, пожалуйста. Я не могу найти вкладку КОМПИЛЯЦИЯ в свойствах проекта - person MegaMind; 10.04.2012
comment
Извините, в переводе с итальянского VS вкладка должна называться «Сборка» (вторая сверху), а текстовое поле для вставки вашего символа должно быть помечено «Условные символы» или что-то в этом роде. Является первым текстовым полем на странице. - person Steve; 10.04.2012
comment
Я так поражен вашим ответом не потому, что он решает мою проблему, а потому, что я так долго работал в Visual Studio и никогда не удосужился узнать, как использовать это текстовое поле. БОЛЬШОЕ СПАСИБО - person MegaMind; 10.04.2012
comment
Привет, я все еще не могу найти вкладку BUILD в пункте 4 списка. Я в VS 2012. - person Chro; 23.05.2013
comment
Кроме того, я пытаюсь использовать эту функцию для проекта C++, если это имеет значение. - person Chro; 23.05.2013
comment
@Chro Не уверен (я не использую C++ со времен, предшествовавших NET), но я думаю, что вы могли бы достичь того же результата, используя свойства проекта, свойства конфигурации, C/C++, препроцессор, определения препроцессора, а затем добавить к уже определенным символам . Дайте мне знать, если это сработает, чтобы я мог завершить ответ - person Steve; 23.05.2013
comment
Ага, так и есть! Большое спасибо! Я задал ТАК вопрос об этом, но добавил ваш ответ и отдал вам должное. - person Chro; 23.05.2013
comment
Это работает, но реализация может занять много времени и может потребовать много бесполезной дополнительной работы. Я объясняю свою точку зрения: есть 8 различных символов определения для активации 8 различных опций. Нужно написать 256 различных конфигураций выпуска и 256 различных конфигураций отладки (и, возможно, повторить для каждого целевого процессора). Затем, когда кто-то хочет выбрать комбинацию вариантов, должен найти правильный среди них. Есть ли другой способ? - person Angelo Mascaro; 30.09.2016
comment
Насколько я знаю, нет. Но 256 различных комбинаций говорят о том, что, возможно, нужно разделить работу по разным сборкам и распределить условно нужные. Но, конечно, я ничего не знаю о вашей ситуации. Это может быть вопрос конкретного нового вопроса. - person Steve; 30.09.2016
comment
Спасибо, Стив, я ценю ваше предложение и то, как вы мне его предложили. Это не случай. Этот пакет предназначен для настройки чего-либо в других пакетах (также в защитном ключе), и большинство флагов включают/отключают одну кнопку или одну функцию, встраивают серийные номера некоторых ключей или позволяют ПО читать серийные номера, устанавливают значения некоторых константы в разные значения или избегать встраивания этих констант... Было бы неплохо иметь только одну конфигурацию сборки со страницей свойств, показывающей все символы определения. Может быть, я сделаю еще одну небольшую программу для настройки символов :-) - person Angelo Mascaro; 03.10.2016

В дополнение к решению Майкла Фрейдгейма вы можете использовать атрибут conditional для централизованных операций инициализации или других функций void:

[Conditional("DEVELOPMENT")]
public static void InitDemo()
{
      Models.LogFile.ErrorLog("This is a Development Version!");
      // init settings
}

Найдено здесь: http://msdn.microsoft.com/de-de/library/4xssyw96%28v=vs.80%29.aspx

person Simon    schedule 28.06.2013