2010-01-19 14 views
7

Parece que Mono ignora dllmaps en el archivo de configuración local.mono ignora dllmaps en el archivo app.config

Quiero portar mi aplicación .NET en Linux (ubuntu) que llama a bibliotecas nativas, así que tengo dllmaps para que mi código funcione. Los mono documentos dicen que tienes que hacer un archivo something.exe.config para something.exe y poner configuraciones específicas de la aplicación en él. analiza el archivo (porque se queja si cometo algunos errores ortográficos) y el nombre del archivo es correcto, pero parece que ignora los dllmaps.

El archivo de configuración es simple:

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

Mono no encuentra el openal32.dll y lanza DllNotFoundException. Pero si copio esa entrada de dllmap en el archivo principal/etc/mono/config, entonces todo está bien. Si hago un $ MONO_LOG_LEVEL = depuración mono ... truco para ver qué hace y veo que no hay ningún intento de cargar libopenal.so en absoluto. Pero muchos intentan cargar archivos libopenal32.dll, ./libopenal32.dll libopenal32.so, openal32.so, etc.

Probablemente me encontré con un error Mono de nuevo?

Quiero empacar este archivo de configuración en el archivo y no quiero pedirle a mis usuarios que entren en el archivo/etc/mono/config.

¿Alguna idea?

Respuesta

7

¿Están todos sus atributos DllImport en el código usando "openal32.dll" o algunos usan "openal32" en su lugar? En cualquier caso, el archivo de configuración hace referencia al ensamblaje que contiene los métodos P/Invocar: lo más probable es que haya creado la configuración para el ensamblaje principal mientras que los métodos P/Invocar están en un ensamblaje de biblioteca por separado. Simplemente cambie el nombre del archivo a OpenAlUsingAssembly.dll.config.

+0

Ese fue el problema ... Escribí el archivo de configuración en el ensamblaje incorrecto. Una de mis referencias usa el dll no la aplicación principal. – Calmarius

+0

+1 tienes un futuro brillante escribiendo mono documentos de desocupación. :) –

1

Estaba teniendo el mismo problema al intentar ejecutar mi programa de prueba OpenAL (en realidad, OpenTK) en Ubuntu 12.04. Al final todo lo que tenía que hacer era:

sudo apt-get install libopenal1 

el fin de obtener las bibliotecas de tiempo de ejecución OpenAL y luego crear un archivo llamado OpenTK.dll.config que contiene:

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

cual asigna la importaciones en OpenTK.dll desde el archivo windows openal32.dll a la versión correcta de la biblioteca compartida en Linux, que es mi caso es libopenal.so.1 (que en realidad parece ser solo un enlace a libopenal.so.1.13.0)