将 mono 与嵌入它的 c++ 应用程序捆绑在一起

Posted

技术标签:

【中文标题】将 mono 与嵌入它的 c++ 应用程序捆绑在一起【英文标题】:Bundling mono with a c++ app that embeds it 【发布时间】: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");强制使用特定框架

【问题讨论】:

【参考方案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");

以上是关于将 mono 与嵌入它的 c++ 应用程序捆绑在一起的主要内容,如果未能解决你的问题,请参考以下文章

调试从 C++ 调用的 C# dll(嵌入 Mono)

在 Mono 中将 C++ 暴露给 C#:函数的无效转换?

嵌入式单声道:将数组从 C# DLL 返回/复制到 C++

如何使用嵌入在 C++ 中的单声道编译 C# 代码?

Mono 和 C# IOCP:这是个好主意吗?

Android Studio 将存根库捆绑到 APK 中