2010-02-27 94 views
5

无论如何在Visual Studio - VB.NET中的生成事件中使用编译器常量? (特别是在生成后事件)在编译事件中使用编译器常量

方案

如果TEST_EDITION=TRUE定义我想生成后事件过程中运行可执行所以如果它是FALSE然后我会别的运行的东西。

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

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

+0

如果你更多地解释你想要做什么,这将有所帮助。 – 2010-02-27 13:10:49

+0

我想写一个基于编译器常量的条件构建事件?不是很清楚吗?但我添加了一个例子来清除这个问题。 – 2010-02-27 13:17:50

回答

11

是的,$(DefineConstants)宏可用,并且可以在生成事件进行测试。例如,项目+编译,高级编译选项,自定义常量=测试可以这样进行测试:

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

喜欢Test = TRUE或复合常数更复杂的自定义常量需要采用不同的解析。无可否认,我很快就放弃了试图找出如何使用可怕的东西FOR command.

+0

真棒,谢谢。 – 2010-02-27 14:05:27

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 

另一种可能性是用于预生成步骤,以生成一个.vb文件,以及在构建步骤中使用的配置文件。

+0

我认为这是你解决这个限制的方法,因为我不需要编译任何东西。我所要做的只有在生成后事件期间常量为TRUE时才运行可执行文件。 – 2010-02-27 13:20:13

+0

将示例更改为接近该问题。 nobugz的答案似乎是更好的解决方案 – Vlad 2010-02-27 14:08:16

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 Name="DoSomething"> 
    <Exec Command="D:\DoSomething.exe"/> 
</Target> 
+0

我不想使用msbuild,因为它不适合我们当前的构建服务器设置。 – 2010-02-27 13:29:46

+0

另外我甚至不确定Msbuild是否支持这一点。 – 2010-02-27 13:30:16

+0

MsBuild有一个ExecTask,它允许你运行一个批处理文件或可执行文件...我已经更新了我的回答 – 2010-02-27 13:58:46