ILMerge的使用有下列限制:
LibZ 可以解決ILMerge的限制:
使用 LibZ 來embed 所有的DLL檔案:
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 位置相同,如下圖所示:
- 若.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 會變大,就變成一個單一執行檔。
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,如下圖所示:
沒有留言:
張貼留言