2009-10-07 46 views
0

我試圖設置我的VisualStudio項目,以根據this page上所述的最新版本號修訂版本號來設置程序集版本。但版本號似乎總是滯後一個版本。自動將我的程序集版本同步到我的SubVersion修訂版時出現問題

我已經將程序集版本屬性拆分爲一個單獨的文件VersionInfo.cs,它使用預生成事件進行更新。

我用下面的代碼顯示在我的窗體的標題版本號:

System.Reflection.Assembly assem = System.Reflection.Assembly.GetExecutingAssembly(); 
this.Text = "My Program Version: " + assem.GetName().Version.ToString(); 

這裏是通過什麼發生的步行路程。

  1. 我提交我的項目,使它在最新版本。

  2. 使用TortiseSVN我使用顯示日誌看到,我在修訂55

  3. 我建我的解決方案。

  4. 我然後打開VersionInfo.cs和看到,預生成事件正確地改寫該文件作爲

    [組件:( 「0.1.55 *」)System.Reflection.AssemblyVersion]

  5. 然而,當我運行該程序的標題欄顯示和舊版本0.1.52.20486

  6. 接下來我打開項目文件在記事本中,並更改的東西,如添加一個空行,然後保存文件。

  7. VisualStudio中顯示,該項目文件已更改的通知,並提示我現在當我建立並運行程序的形式顯示了重裝,我接受

  8. 項目版本0.1.55.20645

  9. 我對項目中的某些內容進行了更改,並提交給SubVersion。

  10. TortiseSVN確認我現在的工作副本是在版本56

  11. 我建立我的項目,VersionInfo.cs正確更新到

    [裝配:System.Reflection.AssemblyVersion(「0.1.56 。*「)]

  12. 我嘗試再次運行應用程序和形式的標題顯示0.1.55.20750而不是0.1.56.xxxxxx

另外我注意到,即使我重建/重新運行我的應用程序內部版本號(版本號中的最後一個數字)也不會更新。這是我的理解,星號將被替換我的每個版本的新號碼。

任何人有任何想法是怎麼回事?

回答

0

當您簽入一個文件時,修訂版本號會像您所知的那樣遞增。問題是,您不知道簽入時的修訂號碼是什麼 - 只有在簽入後才能找到

所以,如果你採用最新版本號,建立你的項目,然後簽入 - 使用的號碼將永遠是過時的。你真正想要的是能夠簽入,然後獲得剛執行的提交的版本,然後然後用正確的版本號建立你的項目。

顯然這是不可能的。

有一種方法 - 使用一個CI系統,在簽入後立即構建您的項目(通過post-commit鉤子)。這些將檢出您剛剛添加的最新版本,更新您的version.cs文件,然後構建。缺點是您的version.cs文件將永遠不會包含正確的版本號(除非CI系統然後再次檢查它)

1

我沒有使用您正在使用的特定工具,但使用的工具要求您在提交後在沙箱上執行更新。與使用上次更新檢索到的版本號的工具有關,而不是最後一次提交。

0

處理這種情況的最好方法是當您進行構建時。

我使用Jenkins作爲我的連續構建服務器,而不是依靠在我的系統上進行手動構建。如果你不使用像詹金斯(Hudson,Atlassian Bamboo和CruiseControl是另外三種流行的連續構建服務器),你應該這樣做。這樣,您的官方版本不依賴於特定的開發人員機器。

如果您確實使用Jenkins,您現在可以使用Nant甚至Ant來幫助您操作構建。我們現在正在與詹金斯和螞蟻一起做這件事。

我所做的是使用msbuild.exe使用Jenkins構建我的項目。在構建之前,我使用Ant來檢索Subversion版本號(實際上,我們使用Jenkin的內部版本號,但理論相同),以修改正確版本的程序集文件。然後,我自己做一個構建。在構建文件時,結果是正確的Subversion版本號(err ..在我們的例子中是Jenkins內部版本號)。

想想吧,你現在可以做你正在做的事情,在Assembly文件中設置Revision。然後Jenkins將在程序集文件中使用正確的版本號構建項目。您下載構建的軟件包,您將在標題欄中看到正確的版本號。

相關問題