V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
a123321456b
V2EX  ›  Linux

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

  •  
  •   a123321456b · 2018-06-15 15:03:38 +08:00 · 2804 次点击
    这是一个创建于 2388 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    6 条回复    2018-06-18 13:16:09 +08:00
    beginor
        1
    beginor  
       2018-06-15 20:24:47 +08:00 via Android   ❤️ 1
    既然是 Linux 了,最稳妥的应该是 docker 了。 先安装 mono runtime, 再根据需要添加依赖的 DLL 文件,这个过程会比较折腾。

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

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

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

    mono 本身就是 portable 的, 很多人折腾 windows 版本的, 但是很少有人折腾 Linux 版本
    beginor
        5
    beginor  
       2018-06-16 06:31:41 +08:00 via Android
    @beginor mono 自带的 mkbundle, 就可以将 c# 程序直接打包成本地化的可执行程序, 自带 runtime,无需在客户计算机上安装 mono, 但是需要你指定客户计算机的系统和版本
    a123321456b
        6
    a123321456b  
    OP
       2018-06-18 13:16:09 +08:00
    @beginor
    @Rocka
    谢谢 2 位的回答 我现在把发行版中的 mono 提取出来 直接复制到程序下 程序运行前设置下临时的环境变量 MONO_PATH MONO_ARGS 什么的 虽然方式有点简陋但暂时没什么问题 如果找到更好的方法我也会来分享
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2811 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:29 · PVG 21:29 · LAX 05:29 · JFK 08:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.