2012-04-05 68 views
0

我發現了一些方法來自動增加與團隊建設數字生成安裝環境的版本號,但他們都不讓我滿意,因爲我有一個C++ MFC應用程序,其中大部分方法將無法工作。自動生成基於時間戳和維克斯3.6

所以我想到了另一種解決方案,這可能對我們的團隊中工作(因爲它是沒有那麼大):

我想有這樣的版本號:

$(major).$(minor).$(buildnumber) <!-- where buildnumber is like YYMMDDHHMM --> 

我覺得$(major)$(minor)可以使用命令行(或預構建的任務,比如從文件grepping它們並把它們放入變量)處理器變量進行設置,但版本號是一個應該基於構建是唯一的。

此方法適用於本地計算機上的每個開發人員以及CI環境(本例中爲TFS)。

有沒有辦法做到這一點?還是有另一種想法自動生成增加的內部版本號(而不是基於時間戳)我還沒有看到?

+1

爲什麼這個問題標籤爲wix? – heavyd 2012-04-05 14:25:14

+2

如果您將此作爲產品版本傳遞給安裝程序,則$(buildnumber)太大,請參閱:http://msdn.microsoft.com/en-us/library/windows/desktop/aa370859(v=vs .85).aspx – BryanJ 2012-04-05 15:12:22

回答

2

這一要求的實現涉及兩個部分:

1)構建自動化生成ProductVerion屬性

2)構建自動化傳遞這個屬性到維克斯建立。

#1,我喜歡用TFS Versioning但也有許多解決方案,在那裏,將你想要做什麼。

#2,我把這樣的代碼在.wixproj:

<PropertyGroup> 
    <MSIProductVersion Condition=" '$(MSIProductVersion)' == '' ">0.1.0</MSIProductVersion> 
</PropertyGroup> 

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
    <DefineConstants>Debug;WiXProductVersion=$(MSIProductVersion)</DefineConstants> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> 
    <DefineConstants>WiXProductVersion=$(MSIProductVersion)</DefineConstants> 
</PropertyGroup> 

在實際WXS我這樣做:

<Product Id="*" Name="IsWiX" Language="1033" Version="$(var.WiXProductVersion)" 
      Manufacturer="ISWIX LLC" UpgradeCode="some upgrade code"> 
    <Package InstallerVersion="200" Compressed="yes" /> 

概念是TFS傳入MSIProductVersion這得到傳遞給編譯器並映射到Version屬性。對於本地開發人員構建MSI只是0.1.0的版本(一個很好的指標,它不是一個正式的版本)。

+0

感謝鏈接到TfsVersioning項目,但恐怕這不能支持非託管C++項目(在我的情況下沒有AssemblyInfo處理)。但我會調查。 – mortomanos 2012-04-10 07:39:35

+0

正如我所說,有很多方法來剝皮這隻貓。我主要試圖證明生成一個版本號並蓋印一個版本號的概念是兩個不同的活動,並展示如何爲WiX MSI加蓋郵票。谷歌搜索vs_version_info顯示了許多點擊,包括這個有趣的點擊:http://www.wintellect.com/CS/blogs/jrobbins/archive/2011/09/05/tfs-2010-build-numbers-file-versions-from -inside-your-c-and-c-projects.aspx – 2012-04-10 12:49:47

+0

現在,該鏈接看起來非常有前途。我嘗試在自定義工作流中添加一些自定義活動,這些活動可以在文件上設置只讀標誌,使用[理查德班克斯的提示](http://www.richard-banks。)修改與模式相匹配的文件中的版本信息。 org/2010/07/how-to-versioning-builds-with-tfs-2010.html),但這種方法更方便。很好的答案! – mortomanos 2012-04-11 14:11:14

0

我解決它使用 「verbuild.exe」 工具找到here從該頁面

遵循的步驟:

  1. 創建初始版本的頭文件:verbuild <version header file> -c
  2. 創建一個資源(.RC)文件:
    1. 包括步驟1中的頭文件
    2. 包含更改以替換適當的版本.rc文件中使用頭文件中的文件(例如,VERSION_FILE
  3. 改變構建調用verbuild建設謨之前更新的版本號:
    • 我運行一個批處理文件來增加內部版本號:verbuild <version header file> %1 -xFP