Ответ 1
Это дубликат этого и да, /p: DefineConstants работает нормально, а конфигуратор прав, это переопределит ВСЕ условные символы, уже определенные в Файл проекта (который хорош IMHO), поэтому вам нужно будет определить их все.
Мне нужно создать демоверсию существующего большого приложения, состоящего из нескольких проектов. Я хотел бы использовать существующие проекты и просто выполнять функции с помощью препроцессорных директив
#if DEMO
mycode.NeuterNow();
#endif
Мы создаем наше приложение с помощью MSBuild, и я идеально использовал что-то в соответствии с:
MSBuild -DefineProperty:DEMO MySolution.sln
Существует ли такая функциональность?
Это дубликат этого и да, /p: DefineConstants работает нормально, а конфигуратор прав, это переопределит ВСЕ условные символы, уже определенные в Файл проекта (который хорош IMHO), поэтому вам нужно будет определить их все.
Try
msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln
Вы должны включить DEBUG или RELEASE и любые другие константы, уже определенные в файле решения, но я думаю, что это должно сработать. Отказ от ответственности: я никогда не пробовал это сам.
Я обнаружил что-то интересное, когда я решил свое решение этой проблемы, и я думал, что поделюсь этим.
Директива/p в MSBuild не ограничена свойствами, которые уже существуют в файле сборки. Вы можете использовать его, чтобы установить что-либо.
Итак, если вы, например, приводите директивы препроцессора с помощью $(FeatureSet), а затем вызываете MSBuild как, например
MSBuild solution.sln /p:FeatureSet=DEMO
он получает #defined соответственно без необходимости ручного clobber и выполнять другие директивы препроцессора, которые у вас запущены.
Я проверил, что это работает в VS2010. Не совсем уверен в том, как вы определяете FeatureSet для сборки, сделанной внутри Visual Studio без MSBuild.