似乎Mono忽略了本地配置文件中的dllmaps.
我想在Linux(ubuntu)上移植我的.NET应用程序,它调用本机库,所以我有dllmaps来使我的代码工作.单声道文档说你必须为something.exe创建一个something.exe.config并将特定于应用程序的配置放入其中.它解析文件(因为如果我在其中犯了一些拼写错误就会抱怨)并且文件名是正确的但它似乎忽略了dllmaps.
配置文件很简单:
<configuration>
<dllmap dll="i:openal32.dll" target="libopenal.so" />
</configuration>
Run Code Online (Sandbox Code Playgroud)
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文件.
有任何想法吗?
代码中的所有DllImport属性是使用"openal32.dll"还是使用"openal32"?在任何情况下,配置文件都是指包含P/Invoke方法的程序集:最可能的问题是您为主程序集创建了配置,而P/Invoke方法位于单独的库程序集中.只需将文件重命名为OpenAlUsingAssembly.dll.config即可.