2011-02-19 86 views
16

目前,在我的自動生成,我用的devenv.exe構建我的解決方案文件:的MSBuild與解決方案文件與DefineConstants

devenv /build myproject1.sln 

現在,我要創建我的應用程序的兩個版本,普通版,和輕的版本。這兩個版本的源代碼是相同的,只是在輕型版本中禁用了一些功能,爲此我使用#define lite預處理器指令(在csproject文件中,這些常量在DefineConstants屬性組下定義)。

在MsBuild中 - 或者只是普通的devenv構建 - 是否可以指定我想要的符號是否應該出現在構建中?我之所以問這個問題是因爲我想第一次使用lite預處理器指令(對於lite版本)構建我的sln文件,而第二次沒有使用lite預處理器指令(對於完整版本)。

回答

29

在項目文件中添加新的的PropertyGroup節精簡版的版本

<PropertyGroup Condition="'$(LiteVersion)'=='true'"> 
    <DefineConstants>$(DefineConstants);lite</DefineConstants> 
</PropertyGroup> 

DefineConstants所有定義刪除精簡版

MSBuild.exe myprojeect1.sln 
MSBuild.exe myprojeect1.sln /p:LiteVersion=true 

您可以在VS中創建其他配置以在各個版本之間切換。但是,當您忘記將標誌添加到Lite配置時,可能會導致配置不匹配。我可以建議更優雅的解決方案。創建.bat文件或更改鏈接以運行myproject1.sln:

set LiteVersion=true 
devenv.exe myproject1.sln 
2

在sln文件中創建兩個配置 - 一個用於Lite,一個用於Normal。在Lite配置中,通過「項目屬性」對話框定義預處理器指令。

然後,在使用devenv.com進行構建時,指定要在其中構建的正確配置。

+0

您想舉一個關於如何操作的例子嗎? – Graviton 2011-02-19 06:51:39

+0

爲什麼這個答案被降低了? – Anttu 2012-10-31 07:49:11