2010-01-08 130 views
20

我想調整我的類庫的TeamCity構建配置的輸出,以便生成的dll文件具有以下版本號:3.5.0.x,其中x是TeamCity選擇的Subversion修訂號。讓TeamCity將Subversion版本號集成到程序集版本

我發現我可以使用BUILD_NUMBER環境變量來獲得x,但不幸的是我不明白我還需要做什麼。

我發現所有的「教程」都說「你只需將其添加到腳本中」,但他們不會說腳本,而「this」通常指的是MSBuild社區擴展的AssemblyInfo任務。

我需要建立一個自定義的MSBuild腳本以某種方式使用它嗎? 「腳本」與解決方案文件還是C#項目文件相同?

我對MSBuild過程根本不瞭解,只是我可以直接將解決方案文件傳遞給MSBuild,但我需要添加到「腳本」中的是XML,解決方案文件決定不會看起來像XML。

那麼,任何人都可以點我一步一步指導如何使這項工作?


這是我結束了:

  1. 安裝MSBuild Community Tasks
  2. 編輯我的核心類庫的.csproj文件,並更改底部,以便它讀取:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
    <Target Name="BeforeBuild"> 
        <AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' " 
         CodeLanguage="CS" 
         OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs" 
         AssemblyVersion="3.5.0.0" 
         AssemblyFileVersion="$(BUILD_NUMBER)" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    

  3. 更改我的所有AssemblyInfo.cs文件,以便它們不指定AssemblyVersion或AssemblyFileVersion(回想起來,我將考慮將AssemblyVersion放回)

  4. 添加了一個鏈接,指向剛纔位於全局的GlobalInfo.cs外的所有項目
  5. 確保該文件是建立一次,所以,我在源代碼控制

現在,這將更新GlobalInfo.cs一個默認的文件只有在環境變量BUILD_NUMBER設置,它是當我通過TeamCity構建時。

我選擇保​​持AssemblyVersion常量,以便引用仍然有效,並且只更新AssemblyFileVersion,以便我可以看到哪個構建dll來自。

回答

18

CSPROJ文件實際上是一個MSBuild文件。

卸載VS.NET中的相關類項目,進行編輯並取消註釋BeforeBuild目標。從MSBuild社區擴展添加FileUpdate MSBuild任務。

在您的MSBuild文件中,您可以使用環境變量$(build_vcs_number_1)從TeamCity檢索BUILD_NUMBER。請注意,您可能需要爲'生產'創建一個額外的配置,'您必須檢查',因爲在本地生成時顯然不適用。

只需使用它作爲FileUpdate任務的ReplacementText屬性的輸入。

請注意,如果您的修訂版號高於65535標記(UInt16),則不能在AssemblyVersion屬性中使用它。

我建議你使用,而不是,但是,AssemblyInformationalVersion,這只是一個沒有這種限制的字符串。除非你確信自己不會碰到這個修訂版的上限,但這似乎是一個不切實際的方法。

或者,您可以設計一種方法(a.b.c.d是您的版本號),使用修訂版div 1000 for c和修訂版mod 1000 for d。

12

在TeamCity 6.5中這是很容易使用AssemblyInfo patcher來實現。

  • 轉到構建配置步驟3「構建步驟」;
  • 點擊「添加構建功能」;
  • 選擇特徵類型「AssemblyInfo patcher」;
  • 指示你想要的版本。我使用:%system.build.number%
+1

不幸的是,他們的補丁並不[當前](http://confluence.jetbrains.net/display/TCD65/AssemblyInfo+Patcher)允許一個指定不同的'AssemblyVersion'和'AssemblyFileVersion'值。 – ladenedge 2011-12-13 17:14:17

+1

您的建議在主要關注的是能夠跟蹤內部版本號的情況下非常有用:謝謝! – faester 2012-01-18 13:42:38

+1

男人我正在做很多Scheiss樣板代碼只是爲了讓我的代碼。你救了我2或3天的工作! – 2014-06-05 12:44:49

相關問題