2016年3月25日 星期五

Use LibZ to distribute the WPF applications or libraries as single file ( 把WPF應用程式整合成一個執行檔 )

ILMerge的使用有下列限制:
  • 若.Net 應用程式有使用reflection, native DLLs, 或是3rd party 有使用 reflection, 則 ILMerge無法將應用程式整合成一個執行檔。
  • ILMerge 不能把 WPF 應用程式與其他 .Net assemblies 整合成為單一執行檔 (因為 WPF 把 .Net assemblies 編碼成 binary resources ,造成 ILMerge 不能修改這些 assemblies )。


 LibZ 可以解決ILMerge的限制:
  • 即使.Net 應用程式有使用reflection, native DLLs, 或是3rd party 有使用 reflection, 使用 LibZ 也可以把這些原件 embed 成為單一執行檔。(參閱: 這裡)
  • 根據上述,LibZ 可將WPF 應用程式與其他 .Net 的DLL檔案 embed 成為單一執行檔。


下載 LibZ - 使用VS2015 的 NuGet Package Manager (註 1)
  • 由 Reference 的 Manage NuGet Packages...下載 LibZ.Tool (註 2),如下:












  • 或是由Package Manager Console 輸入下載指令,如下:
 PM>Install-Package Libz.Tool 






















使用 LibZ 來embed 所有的DLL檔案:

  • 透過command-line (或是Post-build event command line) 輸入以下指令 - 
libz inject-dll --assembly <MyApp.exe> --include *.dll
  • 然後,<MyApp.exe> 檔案 size 會變大,就變成一個單一執行檔。 
[註 1]
NuGet Package Manager 是由 Microsoft 開發的一組Tools,整合在 VS2015 裡面。可以針對 VS的 Project 所需要的 Package (ex: 3rd party components, Resharper, Libz, Fody...) 進行下載,安裝/反安裝,升級,建構 。

[註 2]
NuGet Package Manager 下載的檔案會放在預設的packages folder 裡面。packages folder的位置 與 solution 位置相同,如下圖所示:


若要修改下載路徑,作法如下:
1). 在solution 相同位置建立一個 nuget.config 檔案
2). 編輯 nuget.config,如下圖所示:




沒有留言:

張貼留言