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

2023-12-28

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

Stackoverflow 已经有一些信息 https://stackoverflow.com/questions/567595/mono-mkbundle-utility-on-windows关于使用Mono http://mono-project.com/ and Mkbundle http://linux.die.net/man/1/mkbundle用于从 .Net 项目创建独立的 Windows exe,但我想要的是一个紧凑但有用的 HOWTO。

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


我找到了一个简单的操作方法here http://forum.codecall.net/csharp-tutorials/18098-mkbundle-bundle-mono-applications.html不过,由于我自己没有测试过,所以我不能保证结果。像往常一样YMMV。

引用原文(请同时关注原文的线索):

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

您是否想过为什么需要安装 .NET Framework 或 Mono 才能运行您的程序?好吧,如果您可以分发应用程序而不需要让客户安装额外的框架,那就方便多了,不是吗?所以我们到了。让我们将基于 .NET 的应用程序与 Mono 捆绑在一起,这样您就不需要安装 Mono 或 .NET 来运行它。

准备环境

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

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

Code:

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 捆绑 exe 的命名方式 | Winform1.exe 说明将包含什么,Mono 库无论如何都会包含 | --deps 是必要的,尽管我不确定它的作用 | -z 会大量压缩输出的exe

Code:

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

现在您已经获得了 Bundled1.exe,其中包含您自己的应用程序以及 Mono 本身。您不需要 Mono 或 .NET 来运行它。请注意,它的大小将为 4MB 或更大。那些捆绑在一起的前任可不轻。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Angular 12 库源映射不可用

    升级到 Angular 12 后 自定义 Angular 库组件的源映射不再可用于调试 这是一部分angular json来自使用该库的 Angular 应用程序模块 projects myapp build configurations
  • 使用 POST 而不是 GET 的 REST API

    假设某个服务提供了一些我可以像这样使用的功能 GET service function param1 value1 param2 value2 我可以将它与 POST 查询一起使用吗 POST service function param1
  • 如何在PyQt4中用动画画一条线

    我有一个要点清单 例如 points 160 75 115 567 How to draw a line in PyQt4 so it would be something like this 提前致谢 EDIT For the recor
  • Java 获取 java.lang.Number 或原语的通用子类的 valueOf

    在阅读了很多问题后 我问自己是否可以解决将字符串转换为通用数字而不使用硬编码方法的困境 例如 我从方法中获取类型为 Class 的参数 使用 Number isAssignableFrom 或其他方式我可以检查这是否是一个数字类 但我也从用
  • Lua忽略转义序列

    目前Lua有以下转义序列 a Bell b 退格键 f 换页 n 新队 r 回车 t Tab v 垂直制表符 反斜杠 双引号 单引号 nnn 八进制值 nnn 是 3 个八进制数字 xNN 十六进制值 Lua5 2 LuaJIT NN是两个
  • 使用元素自己的宽度分配左边距

    我想设置margin left元素宽度的负一半 这会获取文档的宽度 services backPanel gt div css margin top this height 2 margin left this width 2 我究竟做错了
  • WebBrowser-Control - 单击链接打开默认浏览器

    我在 WPF 应用程序中使用 WebBrowser Control 例如
  • React/Redux 架构中 API 调用应该放在哪里?

    我正在尝试从 API 检索一些数据并将其传递到我的应用程序中 然而 作为 React Redux 的新手 我想知道从哪里进行这些调用以及如何将其传递到我的应用程序中 我有标准的文件夹结构 组件 减速器 容器等 但我不确定现在将 API 调用
  • 导出 Web 项目

    我使用 java 页面和 eclipse 制作了一个 Web 应用程序 但我不知道如何导出它以供使用 我被要求提供一个 make 文件或其他东西 我还可以通过哪些其他方法从 eclipse 执行此操作 听起来您需要将其导出为 WAR 文件
  • 计算函数极限的最佳方法是什么?

    我计划开发一个应用程序 可以计算用户给出的表达式 函数 的极限 I already have a functional expression evaluator which will definitely come in handy My
  • 为什么 Pylint 认为在条件值中使用 len(SEQUENCE) 不正确?

    考虑这个代码片段 from os import walk files for dirpath filenames in walk mydir More code that modifies files if len files 0 lt C
  • 算术左移时间复杂度

    是什么时间复杂度of 算术左移 n 位操作数的算术右移 运算符 例如 x y 复杂度 用 O 表示法 是当输入大小变得越来越大时算法所花费的时间的渐近特征 对于只能接受有限数量输入的算法来说毫无意义 lt lt 可以采用 2 32 32 个
  • 仅倾斜前后的一侧以获得平箭头

    我创建了一些虚拟的面包屑步骤 第一个面包屑步骤需要在左侧有一个正常的平坦边框 这已完成 悬停时 我需要显示每个面包屑项目的黑色边框 但唯一的问题是悬停时 对于第一个面包屑步骤 我没有像预期的那样在左侧得到平坦的边框 以下是悬停时的预期结果
  • 如何让 Spotify 和其他 Android 音乐应用程序按意图搜索和播放?

    我想创建一个MEDIA PLAY FROM SEARCH https developer android com guide components intents common html PlaySearch 或其他 意图 将在任何主要 A
  • 等待 AJAX 调用 (POST) 完成

    我正在使用 jQuery UI 选项卡 其中每个选项卡都有不同的表单 用户输入各种数据后 他们提交整组选项卡 以便每个选项卡异步发布到服务器 这运作良好 我在这里没有任何问题 然而 我遇到的问题是 我发布的最后一个表单必须在所有其他帖子完成
  • 正则表达式仅适用于第一次出现? [复制]

    这个问题在这里已经有答案了 假设我有以下字符串 这是一个测试 测试 这只是一个测试 结束 我想选择this is a test and this is only a test 我到底需要做什么 我尝试的以下正则表达式产生了一个愚蠢的结果 t
  • Angularjs 多个指令 [gridsection, gridsection] 要求模板:

    我收到错误 Multiple directives gridsection gridsection asking for templateon div 用这个代码 我不明白我是如何使用嵌套指令的或者是什么导致了这个 html页面 div d
  • 我们可以使用检测惯用法来检查类是否具有具有特定签名的成员函数吗?

    鉴于 减少 实施检测惯用语 http www open std org jtc1 sc22 wg21 docs papers 2015 n4502 pdf namespace type traits template
  • Android 计时器计划与 ScheduleAtFixedRate

    我正在编写一个每 10 分钟记录一次音频的 Android 应用程序 我正在使用计时器来做到这一点 但是schedule和scheduleAtFixedRate有什么区别呢 使用其中一种比另一种有性能优势吗 差异最好的解释是这个非 Andr
  • 如何使用 Mono 和 mkbundle 将简单的 .Net 控制台项目转换为可移植的 exe?

    我想将简单的纯 Net 2 0 控制台实用程序转换为便携式 exe 我可以将其放在 USB 记忆棒上并运行 而不必担心 CLR 和框架库是否安装在特定计算机上 Stackoverflow 已经有一些信息 https stackoverflo