如何使用Mono和mkbundle将简单的.Net控制台项目转换为可移植的exe?

我想将我简单的纯.Net 2.0控制台实用程序转换为便携式exe文件,我可以将其放在USB记忆棒上运行,而不必担心CLR和框架库是否安装在特定的机器上。

Stackoverflow已经有一些关于使用Mono和Mkbundle从.Net-projects创建自包含Windows exes的信息,但我想要的是一个紧凑但有用的HOWTO。

从简单的C#Visual Studio项目实现可移植性的最小步骤是什么?

我在这里找到了一个简单的操作方法,但是,由于我自己没有测试过,我无法保证结果。 像往常一样YMMV。

引用原始文章(请关注原始文章中的主题):

Mkbundle:将Mono与您的应用程序捆绑在一起

你有没有想过为什么你需要安装.NET Framework或Mono来运行你的程序? 好吧,如果您可以分发您的应用程序而不会唠叨客户端来安装其他框架,那会更方便,不是吗? 我们在这里。 让我们将基于.NET的应用程序与Mono捆绑在一起,因此您不需要安装Mono或.NET来运行它。

准备一个环境

首先,您需要安装最新的Mono和Cygwin。 安装Mono非常简单,所以你不能搞砸任何东西。 当您开始安装Cygwin时,请进入完整视图,然后请包含4个额外的包。 它们是:gcc,mingw,mingw-zlib和zlib。

现在您需要一个命令提示符。 Mono和Cygwin都会在桌面上创建命令提示的快捷方式,但您需要将它们合并为一个。 这是一个为我做的批处理。 如果您有其他Mono版本,则可能需要更改它。

码:

echo Mono version 2.4 Build 6 echo Prepending 'C:\PROGRA~1\Mono-2.4\bin' to PATH PATH=C:\PROGRA~1\Mono-2.4\bin;%PATH% chdir C:\cygwin\bin bash --login -i 

使用Mono捆绑应用程序

所以我们现在处于命令提示符下,运行这个Cygwin模式。 请注意,这不再是DOS提示符,“dir”将不再起作用。 要列出文件,请使用linux命令“ls”。 您正在浏览的文件夹如下所示。 Arek是用户名。 码:

 C:\cygwin\home\Arek 

使用资源管理器浏览到此文件夹。 现在您将2个文件复制到此文件夹中。 第一个是您的应用程序exe,第二个是您可以在Mono文件夹中找到的文件Mono.dll(2MB)。 码:

 C:\Program Files\Mono-2.4\bin 

由于某种原因,整个过程不适用于长文件名,因此重命名您的应用程序exe。 它应该符合这个旧的DOS 8.3命名。

让我们回到命令提示符。 您只需要1个命令来捆绑您的应用程序,这里有一些解释。

mkbundle是Mono包中的一个程序 -o Bundled1.exe指定如何将Mono-bundled exe命名为 Winform1.exe说明将包含的内容,无论如何都将包含Mono库 – 虽然我不确定它是做什么的,但是必须使用 -z将压缩输出exe很多

码:

 mkbundle -o Bundled1.exe Winform1.exe --deps -z 

所以现在你有了Bundled1.exe,它包含你自己的应用程序和Mono本身。 你不应该需要Mono或.NET来运行它。 请注意,它的大小将为4MB或更大。 捆绑的exes不是轻量级的。