[.NET] 無法載入檔案或組件 (組件版本篇)

AssemblyInfo (*AssemblyVersion) Metadata

無法載入檔案或組件,找到的組件資訊清單定義與組件參考不符。

        一直以來在專案中開發商業類別庫都沒特別注意組件(.dll/.exe)的版本資訊,三年前公司請來厲害的顧問,於是我們開始管理版本、設定統一的軟體資訊,但有些資訊一直不太明白就這樣渾渾噩噩過了幾年,最近找時間來補基礎:

設定組件資訊有兩個方式

1.直接進入AssemblyInfo.cs程式修改:

2.或者專案屬性 >> 應用程式 >>  組件資訊

不過UI提供的欄位少了幾個。

 

然後使用Windows檔案查看設定好的屬性 mapping 組件資訊(詳細資訊),點名:

# 組件屬性 檔案說明
1 AssemblyTitle("QueueTitle")] 檔案描述
2 AssemblyDescription("QueueDescription")] 未到
3 AssemblyCompany("QueueCompany")] 未到
4 AssemblyProduct("QueueProduct")] 產品名稱
5 AssemblyCopyright("QueueCopyright © 2015")] 著作權
6 AssemblyTrademark("QueueTradeMark")] 合法商標
7 AssemblyVersion("1.2.0.0")] 未到
8 AssemblyFileVersion("2.2.3.4")] 檔案版本
9 AssemblyInformationalVersion("3.2.3.4")] 產品版本

到底應到未到的班兵去哪了? 於是查看了參考這顆dll的專案,點開專案參考,用.NET來看:

  • 未到的2號班兵(AssemblyDescription)和7號班兵(AssemblyVersion)去.NET出公差去了。
  • AssemblyCompany(未到原因待查)

延續問題: Version有3個班兵,引發了繼續找出他們差異的興趣,當版號更新時,到底誰才是影響到編譯?

stackoverflow很快的找到

http://stackoverflow.com/questions/64602/what-are-differences-between-assemblyversion-assemblyfileversion-and-assemblyin

測試步驟:

剛好有一個小方案內有2個專案

  • MyQueue Windows應用程式專案,預計要參考下面的QueueUtil函式庫。
  • QueueUtil函式庫專案,經過剛剛的實驗,出公差的AssemblyVersion,版號是1.2.0.0

1.MyQueue 參考QueueUtil.dll,然後編譯產生MyQueue.exe

2.測試MyQueue.exe執行正常

3.接下來,實驗組上場,把QueueUtil專案內AssemblyInfo的AssemblyVersion版號從1.2.0改為1.2.3,然後單獨編譯QueueUtil專案。

4.將dll檔案copy至MyQueue.exe執行目錄

5.測試MyQueue.exe是否可以正確執行?

 啟動沒問題,但使用到QueueUtil的Receive方法是否可以正確執行?

 Oops,出現了要求版本1.2.0 QueueUtil的訊息

6.後面用相同的方法依序測試AssemblyFileVersion、AssemblyInformationalVersion,版號也都有變更,但卻不影響事前編譯好MyQueue.exe的正常運作。

 

紀錄: 函式庫AssemblyVersion 如果有變更,且實際執行目錄下的dll也變更了,那參考他的專案必須重新編譯

 

*下次來記錄版號的自動給號