是否可以将整个c#控制台应用程序与其应用程序文件夹/文件打包到一个可执行的.exe文件中,以便在计算机运行时不需要安装它?
答案 0 :(得分: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
ILMerge的作者说这个“作为ILMerge的作者,我认为这太棒了!如果我知道这个,我永远不会写ILMerge”
它是由杰弗里里希特写的,我希望这里的大多数人都能听说过。 :)