MSBuild Условная компиляция - PullRequest
       12

MSBuild Условная компиляция

2 голосов
/ 17 ноября 2008

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

[SoapDocumentMethodAttribute("https://example",...)]
public string Test()
{
    //doSomething
}

Видите, что "https://example"? Это должно измениться в зависимости от среды. AFAIK Вы не можете сделать эту строку динамической во время выполнения, ее нужно скомпилировать таким образом. Поэтому я пытаюсь получить это так что у меня есть несколько CS-файлов для этого веб-сервиса, в которых жестко закодированы различные URL-адреса атрибутов, и MSBuild меняет их местами при прекомпиляции, поэтому у меня будет база "Service.cs" для тестирования, "Service.cs.production" производственная среда и т. д.

  • Это лучший способ сделать это, или я что-то упускаю, когда у меня может быть одна CS, которая самостоятельно обрабатывает среду?
  • Чтобы сохранить одно и то же имя класса и IntelliSense, не считая вещи двусмысленными, я испортил расширения файлов («Service.cs» против «Service.cs.production»). Это единственный способ сделать это?
  • Учитывая все вышесказанное, все в порядке, и я компилирую для конфигурации "Production", может ли она скомпилировать Service.cs.production вместо Service.cs, и все пойдет не так, как надо?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 17 ноября 2008

Не могли бы вы использовать условные комментарии?

#if TESTING
        [SoapDocumentMethodAttribute(something)]
#else
        [SoapDocumentMethodAttribute(someotherthing)]
#endif

Для вашей тестовой конфигурации вы должны определить константу:

<DefineConstants>TESTING</DefineConstants>
3 голосов
/ 17 ноября 2008

В сочетании с определением констант и использованием директив #if,

Вы также можете написать пользовательскую задачу сборки -> Target BeforeBuild, затем использовать Engine.GlobalEngine.GetLoadedProject ("projpath") в объект Project.

Теперь вы можете манипулировать свойствами объекта Project так, как вам удобно для разных сред.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...