The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

使用 Visual Studio 安裝專案升級程式必須明確指定組件版本

當你使用 Visual Studio 的「安裝專案」來部署應用程式時,你可能會想利用內建的自動升級功能來替換已安裝的所有檔案或組件,但是針對你每一個被加入到安裝專案的專案,並不見得真的會在安裝時自動更新你以為已經更新的檔案,各專案的 AssemblyInfo.cs 已經要看看是否更新了組件檔案版本編號。

當我們在 Visual Studio 中設定「安裝專案」並修改 Version 版本編號時會提示你是否變更 ProductCode 屬性,這時你也會發現 UpgradeCode 屬性並不會改變,因為 ProductCode 是用來識別該產品是否已被安裝,而 UpgradeCode 用來識別是否是同一系列可被升級的產品,若要讓安裝專案自動升級異動的檔案,也必須將 DetectNewerInstalledVersion 屬性與 RemovePreviousVersions 屬性設定為 True 才行。

  

而在各專案的 Properties 目錄下都會有個 AssemblyInfo.cs 檔案定義了該組件的各種資訊:

其中有兩行是關於組件版本組件檔案版本的設定,其中與部署更新有關的就是 AssemblyFileVersion 屬性,如果此版本編號不變,該組件在安裝的過程就不會被更新。

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

但我想應該有不少人因為懶的自己編版本號,所以會採用以下寫法:

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

雖然每次編譯出來的 AssemblyVersion 組件編號會自動設定,但是 AssemblyFileVersion 屬性似乎並不是這麼一回事,所以你將 AssemblyFileVersion 屬性設定為 1.0.* 是沒有作用的,檔案在安裝時並不會自動更新,因此你必須針對 AssemblyFileVersion 屬性設定固定的版本編號,而且在設定產品升級的時候一定要給予不同的版本編號才能讓組件在安裝時自動更新!

相關連結