天天看點

C# 将dll打包到exe中有效方式暨.net程式自動更新有效方式

1. 背景

近期因工作需要,需要制作一個exe應用程式,基于win form開發的,引用了一堆dll檔案,之前都是用ILMerge打包一兩個dll檔案來用的,結果這次死活不行啊。

然後開始了折騰之旅:

折騰1:百度了ILMerge各種問題解決方案嘗試後,總結:ILMerge不可靠、不穩定。

折騰2:使用windows安裝程式InstallShield,後來放棄了,原因一是不夠簡潔明了,二是界面竟然是英文的不能忍我們公司很多不會英文的好不好,三是需要注冊,試用版還提示是個評估版本,最後也不支援更新功能不夠強大。舍棄之。

折騰3,然後又試了幾種打包方法,什麼作為靜态資源啦、什麼nuget下的項目建構枸橘啦,都不行。

最後,還得靠自己,光腳的不能怕穿鞋的。

2. 思路

之前寫過一個帶自動更新的程式,原理就是加了一個啟動器,啟動器的作用如下:

1,啟動器隻負責聯網、檢查更新、下載下傳。

2,如果發現聯網失敗,則使用之前下載下傳的版本。

3,如果聯網成功,檢查版本為最新,則直接運作。

4,如果聯網成功,檢查版本不為最新,則先更新後運作。

我們完全可以這樣實作dll打包:

1,我們釋出的程式是一個啟動器,實際上是一個單獨的小程式,隻具備聯網和下載下傳的功能,而這兩個功能.net framework2.0就有了,無需dll。

2,該程式啟動後自動下載下傳真正的exe應用和相關的dll檔案,然後放到一個目錄中(類似于程式安裝的過程)。

3,下載下傳完畢後運作exe應用,同時每次啟動時還可以檢查和更新。

3. 實作

原理說的很明白了,需要源碼的留言我再去整理下,現在版本更新用的MD5+XML+Web Service,跟本文主題相關度不高,還需要抽離出相關内容形成代碼。

繼續閱讀