2009-06-08 4 views
2

Запись файла конфигурации dllmap используется в Mono для сопоставления запросов для DLL-файлов Windows к библиотекам Linux (.so). Но похоже, что если .NET Framework .NET пытается проанализировать файл конфигурации с такой записью, возникает ошибка, потому что она не понимает «dllmap». Я думаю, что все остальное в моем дистрибутиве может быть распределено без изменений как на Linux, так и на Windows XP. Из всей мобильности, связанной с этим, является ли эта запись конфигурации действительно падением - одной не переносной частью? Разве нет способа поделиться этим файлом и на разных платформах?App.config dllmap entry portability

ответ

2

Вы уверены, что вам нужны записи «dllmap»? Не можете ли вы просто положиться на автоматическое сопоставление «somelibrary» с «somelibrary.dll» в Windows и «somelibrary.so» в Linux?

Кроме того, я, хотя рамки просто пропустить записи он не ожидает ...

EDIT: Стандартный способ транспортировки библиотеки Linux является иметь версию менее символическую ссылку, указывающую на последнюю версию. Таким образом, вы бы добавили libfmodex.so, указывая на libfmodex-4.22.01.so. Затем используйте [DllImport("fmodex")], и рамка будет автоматически отображать остальные.

+0

1) Имя библиотеки Windows - fmodex.dll. Имя библиотеки Linux - libfmodex-4.22.01.so. Я бы предпочел не переименовывать их, и я сомневаюсь, что автоматическое сопоставление это выяснит. 2) Я думал, что .NET будет пропускать записи, которые он не понимает, пока я не ударил ошибку времени выполнения - по-видимому, он никогда не пытался прочитать конфигурационный файл до тех пор, пока не возникла ошибка, а затем, когда он попытался прочитать конфигурацию, чтобы увидеть как реагировать, у него была другая ошибка обработки файла. – BlueMonkMN

+0

Я мог проверить себя, но я не загружался в Linux на данный момент: есть ли такая вещь, как символическая ссылка в файле .tar.gz, чтобы при извлечении архива вы получили файл и символическую ссылку, указывающую на него ? – BlueMonkMN

+0

Да, это поведение dafault дегтя. – skolima

0

Вставьте код импорта dll в отдельную сборку dll. Затем добавьте файл yourinterop.dll.config с записями dllmap. Он будет игнорироваться MS и обрабатываться моно. См. Мой duplicate question.