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很快的找到
測試步驟:
剛好有一個小方案內有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也變更了,那參考他的專案必須重新編譯。
*下次來記錄版號的自動給號