Использование констант компилятора в событиях сборки

Можно ли в любом случае использовать константы компилятора в событиях сборки в Visual Studio - VB.NET? (особенно в событиях после сборки)

Сценарий

Если определено TEST_EDITION=TRUE, я хочу запустить исполняемый файл во время события Post-Build, поэтому, если это FALSE, я запущу что-то еще.

Это можно использовать для создания разных установщиков для разных выпусков.

P.S. Прежде чем кто-то предложит: Нет, я не хочу использовать nant, msbuild или что-то в этом роде


person dr. evil    schedule 27.02.2010    source источник
comment
Было бы полезно, если бы вы объяснили больше о том, что вы пытаетесь сделать.   -  person Jon Skeet    schedule 27.02.2010
comment
Я пытаюсь написать условное событие сборки на основе константы компилятора? Разве это не было ясно? -но я добавил пример, чтобы прояснить это.   -  person dr. evil    schedule 27.02.2010


Ответы (3)


Да, макрос $(DefineConstants) доступен и может быть протестирован в событии сборки. Например, проект + компиляция, дополнительные параметры компиляции, пользовательские константы = тест можно протестировать следующим образом:

if /i "$(DefineConstants)" NEQ "TEST" goto skiptest
echo Setting up for test environment
:skiptest

Более сложные пользовательские константы, такие как Test=TRUE или составные константы, необходимо анализировать по-другому. По общему признанию, я быстро бросил попытки понять, как использовать ужасный ДЛЯ команды.

person Hans Passant    schedule 27.02.2010

Вы пробовали MsBuild PostEvents? это выдержка из .csproj... но то же самое относится и к файлам vbproj

  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
    <Copy SourceFiles="$(OutputPath)$(AssemblyName).dll" DestinationFolder="$(BinariesFolder)" ContinueOnError="true" />
  </Target>

Вы можете использовать его с целью TaskExec, которая позволяет запускать пакетный файл или исполняемый файл.

<Target Name="DoSomething">
    <Exec Command="D:\DoSomething.exe"/>
</Target>
person Jhonny D. Cano -Leftware-    schedule 27.02.2010
comment
Я не хочу использовать msbuild, потому что он не подходит для нашей текущей настройки сервера сборки. - person dr. evil; 27.02.2010
comment
Также я даже не совсем уверен, поддерживает ли Msbuild это. - person dr. evil; 27.02.2010
comment
Существует ExecTask для MsBuild, который позволяет запускать пакетный файл или исполняемый файл... Я обновил свой ответ. - person Jhonny D. Cano -Leftware-; 27.02.2010

Не уверен насчет синтаксиса Visual Basic, но C++ может использовать следующий трюк: файл global_inc.bat читается как:

SET PARAMETER=TRUE

Это может быть введено пакетным скриптом, который вызывается в событии после сборки. Код C++ использовал файл следующим образом:

#define PARAMETER const int parameter
#define SET /**/
#include "global_inc.bat"
;
#undef PARAMETER

Шаг после сборки выглядел так:

call global_inc.bat
if "%PARAMETER%" == "TRUE" echo True

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

person Vlad    schedule 27.02.2010
comment
Я предполагаю, что это ваш обходной путь для этого ограничения, потому что мне действительно не нужно ничего компилировать. Все, что я хочу сделать, это запустить исполняемый файл только тогда, когда константа TRUE во время события после сборки. - person dr. evil; 27.02.2010
comment
изменил пример, чтобы быть ближе к вопросу. однако ответ nobugz кажется мне лучшим решением - person Vlad; 27.02.2010