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

时间:2009-08-24 08:54:57

标签: c# .net mono portability mkbundle

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

Stackoverflow已经some information使用MonoMkbundle来创建.Net-projects的自包含Windows exes,但我想要的是一个紧凑但有用的HOWTO 。

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

1 个答案:

答案 0 :(得分:16)

我找到了一个简单的操作方法here,但是,由于我自己没有测试过,我无法保证结果。像往常一样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不是轻量级的。