AssemblyInformationVersion踩雷記

前幾天回答網友QOO提問,又多學會「AssemblyFileVersion不支援自動跳號,未設定時會引用AssemblyVersion」新知識,知道這些就夠了嗎?並沒有,今天又踩一雷,再獲冷知識一枚。

同事升級專案的Newtonsoft.Json.dll到7.0.1版,NuGet顯示版本為7.0.1版:

由於NuGet安裝時沒自動加入bindingRedirect設定,手動加入時為了找出newVersion的正確版號,參考了檔案資訊:

檔案版本是AssemblyFileVersion,那麼產品版本就是AssemblyVersion囉?加上NuGet Package說現在的版本是7.0.1,所以開開心心填上newVersion="7.0.1.18622":

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"  publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.1.18622"/>
</dependentAssembly>

不料,程式抱怨找不到Newtonsoft.Json 4.5.0版,顯示繫結重新導向沒生效。爬文發現Json.NET 7.0.1相關導向範例都是寫newVersion="7.0.0.0",乖乖改成7.0.0.0後,系統正常運作。

問題來了,7.0.1、7.0.1.18622、7.0.0.0,這麼多版號搞得我好亂,將來遇到同樣狀況,到底要以哪一個為準?

做完功課,老狗又學會新把戲,除了AssemblyVersion、AssemblyFileVersion,還有所謂AssemblyInformationVersion!

  1. AssemblyVersion

    為必要屬性,是參照組件的重要依據,一旦版號改變,參照該組件的程式必須更新(重新編譯或設定組件繫結重新導向)。
  2. AssemblyFileVersion

    主要用於部署管理,可以每次部署時遞增以便區隔,是安裝程式常用的版本依據,實務上可由MSBuild產生(但要自己寫邏輯)。如果想不驚動相關程式悄悄換版,可以維持同一個AssemblyVersion,只編譯成AssemblyFileVersion不同的DLL檔。若未指定AssemblyFileVersion,系統會用AssemblyVersion版號當作AssemblyFileVersion。 AssemblyFileVersion可以用檔案總管檢視(即前面附圖所示的「檔案版本」)。
    注意:用檔案總管是看不到AssemblyVersion的!最簡便的查詢方式是透過Visual Studio:

  3. AssemblyInformationalVersion

    產品版本。它不像AssemblyVersion跟AssemblyFileVersion限定格式為四節數字,允許寫成"0.9 Beta Version"、"1.0 Release Candidate"之類的可讀文字,但過去曾出現過相關工具處理非數字AssemblyInformationalVersion的相容問題(例:Issue1Issue2)。當組件未指定AssemblyInformationalVersion時,系統會使用AssemblyVersion代替。

參考來源:stackoverflow

經過這次教訓,下回遇到要寫bindingRedirect時,就知道要乖乖查Visual Studio的組件屬性視窗,不會再用檔案總管亂查了。

歡迎推文分享:
Published 25 November 2015 09:19 PM 由 Jeffrey
Filed under:
Views: 4,312



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<November 2015>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication