Создайте все решение, но добавьте глобальные условные символы компиляции только для одного проекта - PullRequest
6 голосов
/ 25 января 2011

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

Одно из приложений - это инструмент для демонстрации / анализа, который запускает подпроцесс другого, гораздо более крупного, приложения, основанного на пользователях.ввод и отображение результатов;Таким образом, у инженеров есть инструмент, который поможет настроить их для «больших вычислений».Очевидно, что подпроцесс содержится в другой сборке, и большую часть результатов, представленных инженерам, генерирует

#if ENABLE_TRACE_MATCHING
Trace.WriteLine("Some engineering output");
#endif

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

Я также не могу заменить #if ENABLE_TRACE_MATCHING на #if DEBUG, поскольку это позволило бы получить много разных выходных данных, которые наши инженеры не знали бы, как обрабатывать.

Заранее спасибо.

PS: Если вы думаете, что мой код пахнет, то я согласен.Дополнительно: это в основном не мой код;)

1 Ответ

1 голос
/ 25 января 2011

Вам нужно больше узнать о Microsoft Build, который является готовым инструментом Microsoft .NET, присутствующим в установке любой платформы.

Используя MSBuild, вы можете определить эти «символы» (свойства)и пакет команд (целей).

Это позволяет создать сценарий MSBuild, который импортирует цели Visual Studio по умолчанию из всех проектов в вашем решении, и объявить в сценарии эти свойства («символы»).

Фактически свойство для установки таких символов уже существует: "DefineConstants".

Таким образом, поскольку он у вас есть, у вас может быть сценарий MSBuild, который предоставляет это значение свойства, повторно объявляя его тамТаким образом, ВСЕ цели MSBuild будут знать об этих символах.

РЕДАКТИРОВАТЬ: Проверьте этот другой вопрос тоже: msbuild, определение условных символов компиляции

...