Использование констант компилятора в событиях сборки - PullRequest
5 голосов
/ 27 февраля 2010

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

Сценарий

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

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

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

Ответы [ 3 ]

11 голосов
/ 27 февраля 2010

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

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

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

0 голосов
/ 27 февраля 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, который позволяет запускать пакетный файл или исполняемый файл.

<Target Name="DoSomething">
    <Exec Command="D:\DoSomething.exe"/>
</Target>
0 голосов
/ 27 февраля 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, а также файла конфигурации, используемого на этапе после сборки.

...