Подтвердить что ты не робот

Определить значение препроцессора из командной строки с помощью MSBuild

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

#if DEMO
    mycode.NeuterNow();
#endif

Мы создаем наше приложение с помощью MSBuild, и я идеально использовал что-то в соответствии с:

MSBuild -DefineProperty:DEMO MySolution.sln

Существует ли такая функциональность?

4b9b3361

Ответ 1

Это дубликат этого и да, /p: DefineConstants работает нормально, а конфигуратор прав, это переопределит ВСЕ условные символы, уже определенные в Файл проекта (который хорош IMHO), поэтому вам нужно будет определить их все.

Ответ 2

Try

msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln

Вы должны включить DEBUG или RELEASE и любые другие константы, уже определенные в файле решения, но я думаю, что это должно сработать. Отказ от ответственности: я никогда не пробовал это сам.

Ответ 3

Я обнаружил что-то интересное, когда я решил свое решение этой проблемы, и я думал, что поделюсь этим.

Директива/p в MSBuild не ограничена свойствами, которые уже существуют в файле сборки. Вы можете использовать его, чтобы установить что-либо.

Итак, если вы, например, приводите директивы препроцессора с помощью $(FeatureSet), а затем вызываете MSBuild как, например

MSBuild solution.sln /p:FeatureSet=DEMO

он получает #defined соответственно без необходимости ручного clobber и выполнять другие директивы препроцессора, которые у вас запущены.

Я проверил, что это работает в VS2010. Не совсем уверен в том, как вы определяете FeatureSet для сборки, сделанной внутри Visual Studio без MSBuild.