无论如何在 Visual Studio - VB.NET 的构建事件中使用编译器常量?(尤其是在构建后事件中)
设想
如果TEST_EDITION=TRUE
已定义,我想在 Post-Build 事件期间运行一个可执行文件,所以如果是,FALSE
那么我将运行其他东西。
这可用于为不同版本创建不同的安装程序。
PS 在有人建议之前:不,我不想使用 nant、msbuild 或类似的东西
无论如何在 Visual Studio - VB.NET 的构建事件中使用编译器常量?(尤其是在构建后事件中)
设想
如果TEST_EDITION=TRUE
已定义,我想在 Post-Build 事件期间运行一个可执行文件,所以如果是,FALSE
那么我将运行其他东西。
这可用于为不同版本创建不同的安装程序。
PS 在有人建议之前:不,我不想使用 nant、msbuild 或类似的东西
是的,$(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 命令。
不确定 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 步骤中使用的配置文件。
您是否尝试过 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>