5

无论如何在 Visual Studio - VB.NET 的构建事件中使用编译器常量?(尤其是在构建后事件中)

设想

如果TEST_EDITION=TRUE已定义,我想在 Post-Build 事件期间运行一个可执行文件,所以如果是,FALSE那么我将运行其他东西。

这可用于为不同版本创建不同的安装程序。

PS 在有人建议之前:不,我不想使用 nant、msbuild 或类似的东西

4

3 回答 3

11

是的,$(DefineConstants) 宏可用并且可以在构建事件中进行测试。例如,Project + Compile, Advanced Compile Options, Custom constants = Test 可以这样测试:

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

更复杂的自定义常量(如 Test=TRUE 或复合常量)需要以不同方式解析。诚然,我很快就放弃了尝试弄清楚如何使用可怕的FOR 命令。

于 2010-02-27T13:34:24.407 回答
0

不确定 Visual Basic 的语法,但 C++ 可以使用以下技巧:文件 global_inc.bat 读取为:

SET PARAMETER=TRUE

这可以由在构建后事件中调用的批处理脚本输入。C++ 代码使用该文件如下:

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

postbuild 步骤如下所示:

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

另一种可能性是 prebuild 步骤生成一个.vb文件,以及 postbuild 步骤中使用的配置文件。

于 2010-02-27T13:15:25.613 回答
0

您是否尝试过 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>
于 2010-02-27T13:26:32.323 回答