2014-01-30 55 views
4

是否可以將整個c#控制檯應用程序與其應用程序文件夾/文件打包到一個可執行文件中,以便在運行時不需要在計算機上安裝它?將整個C#控制檯應用程序打包到一個文件中?

+0

即使它包含很多程序集,您不必安裝它,您可以只複製整個文件夾。 – ElDog

+0

我的應用程序也包含一些html/js/css文件。他們可以打包到.exe文件中嗎? – Raskolnikoov

+0

是的,作爲一個嵌入式資源。這比將程序集打包到一個可執行文件中更容易也更常見。看到Matthew Watson的回答。 – ElDog

回答

7

如果沒有很多資源的DLL(有翻譯字符串,在不同的子文件夾),那麼你可以使用ILMerge爲DLL文件做到這一點:

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

ILMerge是一個可用於將多個.NET程序集合合併爲一個程序集的實用程序。

如果您還有其他文件,您將不得不將它們作爲資源添加到您的程序並在運行時解壓縮它們。

看到這裏就如何嵌入資源文件,並在運行時提取它們的詳細信息:

http://support.microsoft.com/kb/319292

簡單地說:你已經添加到您的項目中嵌入的資源後,你這樣做:

var assembly = Assembly.GetExecutingAssembly(); 
var stream = assembly.GetManifestResourceStream("MyNamespace.MyResourceFileName"); 

// ... do something with stream, e.g. write it out to a file. 

[編輯]

喲你實際上可以完全廢除ILMerge,並擁有更強大的解決方案。

看到這裏的細節:http://blog.nenoloje.com/2011/08/better-alternative-to-ilmerge.html

在這裏:http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

ILMerge的作者說,這「作爲ILMerge的作者,我認爲這是美妙的,如果我早知道這一點,我從來不會寫ILMerge「

這是傑弗裏裏希特寫的,我希望這裏的大多數人都會聽說過。 :)

+1

一個好的開始是這個工具http://ilmergegui.codeplex.com/這是ilmerge的gui包裝。 –

+0

[ILRepack](https://github.com/gluck/il-repack)是一個開源替代方案(針對ILMerge) – Gluck

相關問題