因為先前曾嘗試用 SharpDevelop 寫網路廣播收聽程式, 編譯後除了主程式的執行檔外還會另外產生有引用到的組件的 dll 檔,如下圖:

但卻發現 TimeRadio 這支程式居然可以弄成單一執行檔而留言詢問。感謝該軟體的作者芭樂哥哥的回覆分享而得知 ILMerge 這個好用的命令列工具,讓我也能達成目的。

ILMerge
http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en

http://research.microsoft.com/en-us/people/mbarnett/ILMerge.aspx

安裝後程式會放在 C:\Program Files\Microsoft\ILMerge\ 目錄,直接執行會顯示可用參數

C:\>”c:\Program Files\Microsoft\ILMerge\ILMerge.exe”
Usage: ilmerge [/lib:directory]* [/log[:filename]] [/keyfile:filename [/delaysign]] [/internalize[:filename]] [/t[arget]:(library|exe|winexe)] [/closed] [/ndebug] [/ver:version] [/copyattrs [/allowMultiple]] [/xmldocs] [/attr:filename] [/targetplatform:[,] | /v1 | /v1.1 | /v2 | /v4] [/useFullPublicKeyForReferences] [/wildcards] [/zeroPeKind] [/allowDup:type]* [/union] [/align:n] /out:filename […]

以我的環境狀況就是執行下列指令

“c:\Program Files\Microsoft\ILMerge\ILMerge.exe” /ndebug /out:netR.exe netRadio.exe Interop.WMPLib.dll

然後就如下圖所示得到一個 netR.exe 的單一執行檔,就可以拿來作分發部署了,不過 .NET Framework 還是要裝的。

另外也有人寫出視窗介面版來簡化操作

ILMerge-GUI, merge .NET assemblies
http://ilmergegui.codeplex.com/