怎样在 Linux 的程序中带上 mono 运行时

2018-06-15 15:03:38 +08:00
 a123321456b

现在准备发布一个 c#程序到 linux 要求客户机不安装新的依赖

已经安装 mono 的场合直接使用就可以 这没有问题

问题是没有 mono 的客户机 或者版本太低的机器

我希望在自己的程序下带一个 mono 的 runtime 然后用这个 mono 启动 c# 请问有没有什么好的解决方案 谢谢

2634 次点击
所在节点    Linux
6 条回复
beginor
2018-06-15 20:24:47 +08:00
既然是 Linux 了,最稳妥的应该是 docker 了。 先安装 mono runtime, 再根据需要添加依赖的 DLL 文件,这个过程会比较折腾。

不在意体积的话可以在 docker 中安装完整的 mono-devel。
a123321456b
2018-06-15 23:12:21 +08:00
@beginor 我相信 docker 是一个不错的解决不同环境办法 但是...不太适合这个问题 因为问题会转变成 这次该怎么在我的发布中自带一个 docker
Rocka
2018-06-15 23:33:44 +08:00
不知道 AppImage 是否可行,这里只是提一个建议,并没有具体使用过 ...
beginor
2018-06-16 06:26:35 +08:00
@a123321456b 不用 docker 的话还可以考虑 flatpak 格式, 但是又必须要求客户端支持 flatpak,😂

就算你搞好了 portable 的 mono, 但它肯定依赖一些特定版本的本地库,而这些本地库对 linux 版本又有一些要求, 所以说 portable 的 mono 在 linux 上用的人很少。

Linux 版本太多太乱, 如果你能知道客户 linux 的版本, 这样才容易做出来。

mono 本身就是 portable 的, 很多人折腾 windows 版本的, 但是很少有人折腾 Linux 版本
beginor
2018-06-16 06:31:41 +08:00
@beginor mono 自带的 mkbundle, 就可以将 c# 程序直接打包成本地化的可执行程序, 自带 runtime,无需在客户计算机上安装 mono, 但是需要你指定客户计算机的系统和版本
a123321456b
2018-06-18 13:16:09 +08:00
@beginor
@Rocka
谢谢 2 位的回答 我现在把发行版中的 mono 提取出来 直接复制到程序下 程序运行前设置下临时的环境变量 MONO_PATH MONO_ARGS 什么的 虽然方式有点简陋但暂时没什么问题 如果找到更好的方法我也会来分享

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/463397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX