2014-01-30 34 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

相关问题