2010-02-27 93 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