mono忽略app.config文件中的dllmaps

时间:2010-01-19 20:34:09

标签: linux mono

Mono似乎忽略了本地配置文件中的dllmaps。

我想在Linux(ubuntu)上移植我的.NET应用程序,它调用本机库,所以我有dllmaps来使我的代码工作。单声道文档说你必须为something.exe创建一个something.exe.config并将特定于应用程序的配置放入其中。它解析文件(因为如果我在其中犯了一些拼写错误就会抱怨)并且文件名是正确的但它似乎忽略了dllmaps。

配置文件很简单:

<configuration>
<dllmap dll="i:openal32.dll" target="libopenal.so" />
</configuration>

Mono找不到openal32.dll并抛出DllNotFoundException。但是如果我在主/ etc / mono / config文件中复制那个dllmap条目,那么一切都很好。 如果做$ MONO_LOG_LEVEL = debug mono ...技巧看看它做了什么,我看到根本没有尝试加载libopenal.so。但是很多人试图加载libopenal32.dll,。/ libopenal32.dll libopenal32.so,openal32.so等文件。

可能我又遇到了一个Mono bug?

我想将此配置文件打包到存档中,我不想让我的用户弄乱/ etc / mono / config文件。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

代码中的所有DllImport属性是使用“openal32.dll”还是使用“openal32”? 在任何情况下,配置文件都是指包含P / Invoke方法的程序集:最可能的问题是您为主程序集创建了配置,而P / Invoke方法位于单独的库程序集中。 只需将文件重命名为OpenAlUsingAssembly.dll.config。

答案 1 :(得分:1)

我在尝试在Ubuntu 12.04下运行我的OpenAL(实际上是OpenTK)测试程序时遇到了同样的问题。最后,我需要做的就是:

sudo apt-get install libopenal1

为了获取OpenAL运行时库,然后创建一个名为OpenTK.dll.config的文件,其中包含:

<configuration>
  <dllmap dll="i:openal32.dll" target="libopenal.so.1" />
</configuration>

将OpenTK.dll中的导入从windows openal32.dll文件映射到linux下的正确版本的共享库,我的情况是libopenal.so.1(实际上它似乎只是libopenal的一个链接) .so.1.13.0)。