如何将整个 C# 控制台应用程序打包为一个文件?

5

能否将整个C#控制台应用程序及其应用程序文件夹/文件打包成一个可执行的.exe文件,以便在运行时无需在计算机上安装?


即使包含多个程序集,您也无需安装它,只需复制整个文件夹即可。 - ElDog
我的应用程序包含一些HTML/JS/CSS文件。它们是否可以打包到.EXE文件中? - Raskolnikoov
是的,作为嵌入式资源返回翻译后的文本更加简单和常见。请参考Matthew Watson的回答。 - ElDog
1个回答

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了。”

这篇文章是由Jeffrey Richter撰写的,我希望大多数人在这里都听说过他。 :)


1
一个不错的开始是使用这个工具 http://ilmergegui.codeplex.com/,它是 ilmerge 的图形用户界面封装。 - Jürgen Steinblock
ILRepack是一个开源替代品(针对ILMerge)的工具。 - Gluck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接