無論如何在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