2013-07-12 187 views
0

我不知道是否理解或不是缺乏,但我已經在我的WiX的安裝程序執行以下代碼版本號不使用SVN版本號

<?ifdef svn.BUILD_NUMBER?> 
    <?define PRODUCTVERSION="1.0.$(svn.BUILD_NUMBER).0"?> 
<?else?> 
    <?define PRODUCTVERSION="1.0.1.0"?> 
<?endif?> 

<Product Id="*" Name="My Installer" Language="1033" Version="$(var.PRODUCTVERSION)" Manufacturer="My Corporation" UpgradeCode="170e2710-5690-4433-8787-7bcd0a922fbc"> 

無論我怎麼努力,但是我不能讓安裝程序使用SVN修訂版號...我錯過了什麼/做錯了什麼?

+0

svn不是一個內置的變量前綴(即:var,env和sys)。它必須在預處理器擴展中定義。你在用嗎?如果沒有,它肯定可以成爲將這些信息加入到你的項目中的一種方式。 – Netfangled

回答

1

變量必須有三個前綴之一,這取決於它們是如何創建的:

  • 變種。
  • env。
  • sys。

Documentation

這哪裏是 「svn.BUILD_NUMBER」 是從哪裏來的?

UPDATE:

從您的評論,好像你需要從你的項目之外拿到版本號並把它裏面。 有很多方法可以做到這一點。一些CI服務器將爲構建版本號設置一個環境變量。

在任何情況下,你必須使用var.env.糾正你的預處理器變量用法:

<?ifdef env.BUILD_NUMBER?> 
    <?define PRODUCTVERSION="1.0.$(env.BUILD_NUMBER).0"?> 
<?else?> 
    <?define PRODUCTVERSION="1.0.1.0"?> 
<?endif?> 

如果您需要首先創建環境變量,運行如下命令會做到這一點:

set BUILD_NUMBER= 
for /F "tokens=1,2" %t in ('svn info') do^
    @if "%t"=="Revision:" set BUILD_NUMBER=%u 

你可以得到很多發燒友,根據您的需要:生成維克斯包括(.wxi),使用的MSBuild(看到你引用的文章)來運行任務,例如執行svn info,使用snv info --xml與一些XML處理,....

+0

爲了100%誠實,我記得前段時間試圖做這件事,偶然發現了這個註釋,我似乎無法找到原始來源。然而,其背後的想法是,svn.BUILD_NUMBER是從SVN給出的項目文件夾的版本號派生出來的......回想起來,我意識到這將永遠不會奏效。然而,我嘗試實現我在這裏找到的東西(http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/),但我仍然沒有運氣 – Jimmy