【问题标题】:Bundling mono with a c++ app that embeds it将 mono 与嵌入它的 c++ 应用程序捆绑在一起
【发布时间】:2013-05-13 23:04:14
【问题描述】:

我创建了一个示例 c++ 应用程序,它使用动态链接来嵌入单声道(如此处所述 http://www.mono-project.com/Embedding_Mono)并使用 C# 编写脚本。只要将 mono 安装在全局程序集缓存 (GAC) 中,它就可以正常工作。

有没有办法将 mono 与我的 c++ 可执行文件捆绑在一起,以便我可以将它与我的 c++ 可执行文件一起安装?

我一直在看 mkbundle,但它看起来像是将 mono 与 c# 应用程序打包在一起。

编辑:重新格式化下面的答案

#include <cstdlib>
_putenv("MONO_GAC_PREFIX=C:\\cygwin\\usr\\local\\bin\\");
mono_set_dirs("C:\\cygwin\\usr\\local\\lib","C:\\cygwin\\usr\\local\\etc");

编辑: 更正:我只需要在可执行文件的文件夹中复制/粘贴 mono-2.0.dll 并使用 mono_set_dirs("C:\\cygwin\\usr\\local\\lib","C:\\cygwin\\usr\\local\\etc");强制使用特定框架

【问题讨论】:

    标签: mono embed bundle mono-embedding


    【解决方案1】:

    Mono 由 2 个不同的部分组成:

    • 用 C 编写的基本运行时,可嵌入,如您的 OQ 中所述
    • 很多类库,大部分是用 C# 编写的。这些不与运行时一起嵌入,而是驻留在 GAC 中

    基本上,您需要提供自己的 GAC - 这很容易做到,只需将它带入您的应用文件夹结构,然后将 MONO_GAC_PREFIX 环境变量设置为您安装的任何位置。

    【讨论】:

    • 如果我设置了这个环境变量并且我的用户安装了单声道会发生什么?我的自定义单声道不会总是执行而不是我用户的单声道吗?
    • 效果很好,谢谢!! #include _putenv("MONO_GAC_PREFIX=C:\\cygwin\\usr\\local\\bin\\"); mono_set_dirs("C:\\cygwin\\usr\\local\\lib","C:\\cygwin\\usr\\local\\etc");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多