簡體   English   中英

如何在夜間構建期間自動設置裝配版本?

[英]How do I automatically set assembly version during nightly build?

我們有一個每晚構建過程,自動版本化所有C ++項目。 這是它的工作原理。 有一個公共頭文件VersionNumber.h ,它具有版本號的特定#define nighly構建檢查此文件,增加#define后面的整數並將其檢入。所有Visual C ++項目#include該頭文件到其資源文件中並使用該定義來指定版本(版本是smth,如1.0.3.ThatNumber )。

到現在為止還挺好。 現在,我想對在同一日常構建中構建的C#類庫具有相同的功能。 目前他們都有

[assembly: AssemblyVersion("1.0.*")]

在AssemblyInfo.cs文件和庫中最終得到1.0.HorribleNumber.AnotherHorribleNumber作為版本,這兩個數字與C ++項目使用的數字無關。

如何以最小的努力在我的C#項目中使用相同的清除自動版本編號?

首先,您可以指定完整版本,如下所示:

[assembly: AssemblyVersion("1.0.9.10")]

其次,使這更簡單(並回應您的C ++方法)的一種常見方法是使單個Version.cs文件(名稱不重要)位於具有其中版本屬性的公共位置。 然后,您可以將此文件添加為所有cs項目的鏈接 ,記住要從AssemblyInfo.cs文件中刪除版本屬性。 這樣,您只需要更新一個文件(在運行構建之前)。 您還可以在Version.cs文件中放置其他常用程序集屬性,例如:NeutralResourcesLanguage或CLSCompliant。

如果不使用單個“Version.cs”方法,則可以遞歸地處理源代碼目錄結構,並單獨更新AssemblyInfo文件(在運行構建之前)。

它可能與您無關,但版本號(在AssemblyVersion中)的最大范圍為16位。 我已經看到這成為這些數字使用日期的問題。 如果你希望擁有更大的自由度,那么AssemblyFileVersion沒有這些限制,但純粹僅用於.Net中的信息目的,而不是程序集的標識的一部分。 將AssemblyVersion和AssemblyFileVersion設置為相同的值是常見的,因為某些工具會顯示這些值的組合。

有關AssemblyVersion與AssemblyFileVersion的更多信息,請參閱以下內容:

AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion之間有什么區別?

我們使用FinalBuilder進行自動構建(我們讓TeamCity調用它),它會自動執行這類工作(即它可以從其他地方獲取構建號(ini文件,環境變量,命令行,等等)然后更新所有具有內部版本號的裝配版本。)

顯然不是唯一的方法,但是如果你沒有使用像FinalBuilder這樣的東西,那么試一試 - 我們的經驗是你開始想知道為什么你以前花了這么長時間聰明的Makefile和批處理文件......

但是如果您不想這樣做,您是否可以獲得生成/修改VersionNumber.h文件的相同進程,以便吐出VersionNumber.cs,其中包含AssemblyVersion行? 然后,您可以在項目中包含該文件。

AssemblyVersion指令不需要與AssemblyInfo的所有其他內容位於同一文件中。

您可以執行類似於已經為C ++技術執行的操作,但搜索"assembly: AssemblyVersion(字符串並將引號中的數字替換為完整的所需版本號)。

在C#中,版本號上的通配符告訴編譯器自動更新版本號 - 如果沒有通配符,它​​將只使用提供的完整號碼。

例如

[assembly: AssemblyVersion("1.0.3.10")]

在您在文件中更改之前,將始終使用該版本號。

您可以通過添加鏈接來從另一個文件設置程序集版本。 類似的解決方案是

鏈接文字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM