選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (563 個字)

組件版本自動取號,與-swaggerdoc-上的呈現

Untitled

在密集開發階段,可能數日一更,甚至於一日數更。若是牽涉到多位開發者與測試者,常會有以下的困擾:

Tester: 請問前幾天提到的那個很緊急的 Bug 修好了嗎?

Developer: 早就改好了,應該已經上版了。

Tester: 可是我試起來怎麼還是有問題?

Developer: 嗯,你是用正式機嗎?我們只會部署到測試機哦,可能要等客戶的 SE 他們才有權限。

Tester: 那我要怎麼確認是「已經修改的版本」呀?

這樣常見的場景,其實可歸納為兩個主要問題:

  • 組件版本是否具有可識別性
  • 組件版本是否有機會呈現
關於第一個問題,微軟是讓我們有機會定義 major.minor.build.revision 形式的版本號,其實我們可以只用前兩位,後面就交給自動跳號處理。而且最棒的是,甚至不用寫程式就能達成。要怎麼做到呢?在專案 Properties 目錄下的 AssemblyInfo.cs 加上以下的屬性:
  • [assembly: System.Reflection.AssemblyVersion("1.0.*")]
其實就可以了,未來的每次建置,build 是「自西元兩千年至今的日數」;而 revision 是「今天已過的秒數除以二」。但這招與一些較近期的預設屬性衝突,所以我們還要打開專案定義檔 *.csproj,在 PropertyGroup 裡面加兩個設定值:
  • <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  • <Deterministic>false</Deterministic>

經過以上的步驟,應該就能順利編譯我們的組件,並且總是有自動跳號的版本。

接著第二個問題,當組件被使用時,「人」可以怎麼很容易地區分「喔,這個組件更版了」,或是「上週的網站已經更新」呢?這裡舉 Web API 的開發為例,通常我們會準備 Swagger 頁面給使用者測試,並且用來做為溝通的介面。所以翻開 Swagger 的其中一個定義:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = Assembly.GetExecutingAssembly().GetName().Version?.ToString(),
        Title = "..."
    });
});

就可以在 Swagger 頁面上,輕鬆呈現組件版本。

CDC Testing
善用-net-8-控制時間相關的測試
 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/06/09, 週一

Captcha 圖像