mono игнорирует dllmaps в файле app.config - PullRequest
8 голосов
/ 19 января 2010

Кажется, что Mono игнорирует dllmaps в локальном файле конфигурации.

Я хочу перенести свое приложение .NET в Linux (ubuntu), которое вызывает собственные библиотеки, поэтому у меня есть dllmaps, чтобы мой код работал. В моно-документах говорится, что вы должны сделать что-то.exe.config для чего-то .exe и поместить в него специфичные для приложения конфиги. он анализирует файл (потому что жалуется, если я в нем допускаю орфографические ошибки) и имя файла правильное, но, похоже, игнорирует dllmaps.

Файл конфигурации прост:

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

Mono не находит openal32.dll и выдает DllNotFoundException. Но если я скопирую эту запись dllmap в основной файл / etc / mono / config, то все в порядке. Если выполнить трюк $ MONO_LOG_LEVEL = debug mono ..., чтобы посмотреть, что он делает, и я вижу, что вообще не делается попытка загрузить libopenal.so. Но многие пытаются загрузить файлы libopenal32.dll, ./libopenal32.dll, libopenal32.so, openal32.so и т. Д.

Возможно, я снова столкнулся с моно-ошибкой?

Я хочу упаковать этот файл конфигурации в архив, и я не хочу просить моих пользователей возиться с файлом / etc / mono / config.

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 21 января 2010

Все ли ваши атрибуты DllImport в коде используют "openal32.dll" или некоторые вместо этого используют "openal32"?В любом случае файл конфигурации относится к сборке, содержащей методы P / Invoke: наиболее вероятная проблема заключается в том, что вы создали конфигурацию для основной сборки, в то время как методы P / Invoke находятся в отдельной сборке библиотеки.Просто переименуйте файл в OpenAlUsingAssembly.dll.config.

1 голос
/ 09 августа 2012

У меня просто была та же проблема, когда я пытался запустить мою тестовую программу OpenAL (фактически OpenTK) под Ubuntu 12.04. В конце концов все, что мне нужно было сделать, это:

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).

...