我想将我简单的纯.Net 2.0控制台实用程序转换为便携式exe文件,我可以将其放在USB记忆棒上运行,无需担心CLR和框架库是否安装在特定计算机上。
Stackoverflow已经some information使用Mono和Mkbundle来创建.Net-projects的自包含Windows exes,但我想要的是一个紧凑但有用的HOWTO 。
从简单的C#Visual Studio项目实现可移植性的最小步骤是什么?
答案 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不是轻量级的。