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文件。
有什么想法吗?
答案 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)。