无论如何在Visual Studio - VB.NET中的生成事件中使用编译器常量? (特别是在生成后事件)在编译事件中使用编译器常量
方案
如果TEST_EDITION=TRUE
定义我想生成后事件过程中运行可执行所以如果它是FALSE
然后我会别的运行的东西。
这可用于为不同版本创建不同的安装程序。
P.S.在有人建议之前:不,我不想使用nant,msbuild或类似的东西
无论如何在Visual Studio - VB.NET中的生成事件中使用编译器常量? (特别是在生成后事件)在编译事件中使用编译器常量
方案
如果TEST_EDITION=TRUE
定义我想生成后事件过程中运行可执行所以如果它是FALSE
然后我会别的运行的东西。
这可用于为不同版本创建不同的安装程序。
P.S.在有人建议之前:不,我不想使用nant,msbuild或类似的东西
是的,$(DefineConstants)宏可用,并且可以在生成事件进行测试。例如,项目+编译,高级编译选项,自定义常量=测试可以这样进行测试:
if /i "$(DefineConstants)" NEQ "TEST" goto skiptest
echo Setting up for test environment
:skiptest
喜欢Test = TRUE或复合常数更复杂的自定义常量需要采用不同的解析。无可否认,我很快就放弃了试图找出如何使用可怕的东西FOR command.
真棒,谢谢。 – 2010-02-27 14:05:27
不确定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
文件,以及在构建步骤中使用的配置文件。
我认为这是你解决这个限制的方法,因为我不需要编译任何东西。我所要做的只有在生成后事件期间常量为TRUE时才运行可执行文件。 – 2010-02-27 13:20:13
将示例更改为接近该问题。 nobugz的答案似乎是更好的解决方案 – Vlad 2010-02-27 14:08:16
你试过了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>
我不想使用msbuild,因为它不适合我们当前的构建服务器设置。 – 2010-02-27 13:29:46
另外我甚至不确定Msbuild是否支持这一点。 – 2010-02-27 13:30:16
MsBuild有一个ExecTask,它允许你运行一个批处理文件或可执行文件...我已经更新了我的回答 – 2010-02-27 13:58:46
如果你更多地解释你想要做什么,这将有所帮助。 – 2010-02-27 13:10:49
我想写一个基于编译器常量的条件构建事件?不是很清楚吗?但我添加了一个例子来清除这个问题。 – 2010-02-27 13:17:50