2009-01-25 92 views
11

可能重複:
.NET windows application, can it be compressed into a single .exe?我可以在exe中包含dll(在Visual Studio中)嗎?

運行我的應用我需要AxInterop.WMPLib.dllInterop.WMPLib.dll,它們位於調試和發佈文件夾。有沒有辦法將這些dll包含到exe中,這樣我的應用程序只能在一個文件中使用?

+0

儘管這是可能的,但我並不喜歡它。共享庫的要點是它們在程序之間共享。如果程序發現它們尚未安裝,那麼下載它們怎麼辦? – 2009-01-25 02:07:47

回答

19

只要你的DLL是.NET程序集,那麼ILMerge應該能夠將你的exe和它的所有依賴關係合併到一個文件中。

+1

這在ILMerge頁面上也有說明,但對於WPF應用程序,請使用以下內容:http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr -via-c-third-edition.aspx – Menefee 2012-07-26 17:51:37

0

將它們包含爲嵌入式。然後您可以在運行時提取它們。

-2

例如,將x.dll添加到項目並將其生成操作設置爲嵌入式資源。

要提取:

string AppPath=Assembly.GetExecutingAssembly().Location; 
Assembly ThisAssembly=Assembly.LoadFrom(AppPath); 
System.IO.Stream fs=ThisAssembly.GetManifestResourceStream("yourproectname.x.dll"); 
int ssize=(int)fs.Length; 
byte [] buf=new byte[ssize]; 
fs.Read(buf,0,ssize); 
fs.Close(); 
+2

前兩行是「Assembly thisAssembly = Assembly.GetExecutingAssembly();」的不必要複雜。然後在最後缺少這一行:「Assembly.Load(buf);」。最後,這是一個可怕的解決方案,因爲您只能通過反射訪問加載的程序集。 – 2009-01-25 02:23:35

0

是的,我離開了代碼寫入文件了...

FileStream so=new FileStream("c:\\\wherever\\\x.dll",FileMode.Create); 

so.Write(buf,0,ssize); 

so.Close(); 

無需額外的工具。

4

您可以使用像boxedapp或thinstall工具...

4

我也推薦boxedapp。這是偉大的應用程序!

+2

我更喜歡使用BoxedApp。這是如此簡單! – MastAvalons 2011-12-15 16:55:28

相關問題