2010-01-19 5 views
7

Mono가 로컬 구성 파일의 dllmaps를 무시하는 것처럼 보입니다.mono가 app.config 파일의 dllmaps를 무시합니다.

내 .NET 응용 프로그램을 네이티브 라이브러리를 호출하는 Linux (우분투)에 이식하여 코드 작업을위한 dllmaps가 있어야합니다. 모노 문서에서는 something.exe에 대해 something.exe.config를 만들고 응용 프로그램 특정 구성을 넣어야한다고 말합니다. 파일을 구문 분석하기 때문에 (일부 맞춤법 오류가 생기면 불평하기 때문에) 파일 이름은 정확하지만 dllmaps는 무시됩니다.

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

모노가 openal32.dll을 찾지 않고 DllNotFoundException을 던졌습니다 :

설정 파일은 간단하다. 하지만 기본/etc/mono/config 파일에 dllmap 항목을 복사하면 모든 것이 정상입니다. 만약 $ MONO_LOG_LEVEL = debug mono ... 트릭이 무슨 일을하는지 알고 싶다면 libopenal.so를 전혀로드하지 않으셔도됩니다. 그러나 많은 사람들이 libopenal32.dll, ./libopenal32.dll, libopenal32.so, openal32.so 등의 파일을로드하려고 시도합니다.

아마도 다시 Mono 버그가 발생 했습니까?

이 구성 파일을 아카이브에 압축하고 싶지만 사용자에게/etc/mono/config 파일을 엉망으로 만들지는 말고 싶지 않습니다.

아이디어가 있으십니까?

답변

7

"openal32.dll"을 사용하는 코드의 DllImport 속성이 모두 있습니까? 아니면 "openal32"를 사용하는 코드가 있습니까? 어떤 경우이든 구성 파일은 P/Invoke 메서드가 포함 된 어셈블리를 참조합니다. P/Invoke 메서드가 별도의 라이브러리 어셈블리에있는 동안 주 어셈블리에 대한 구성을 만든 것이 가장 문제 일 수 있습니다. 파일의 이름을 OpenAlUsingAssembly.dll.config로 바꿉니다.

+0

그건 문제가 ... 내가 잘못된 어셈블리에 구성 파일을 썼습니다. 내 참조 중 하나는 기본 응용 프로그램이 아니라 dll을 사용합니다. – Calmarius

+0

+1 모노 deobfuscation 문서를 작성하는 밝은 미래가 있습니다. :) –

1

Ubuntu 12.04에서 OpenAL (실제로 OpenTK) 테스트 프로그램을 실행하는 동안 동일한 문제가 발생했습니다. 결국 내가 할하는 데 필요한 모든했다 :

sudo apt-get install libopenal1 

포함 OpenTK.dll.config라는 파일을 생성 한 후 OpenAL에 런타임 라이브러리를 얻고하기 위하여 :

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

매핑 OpenTK.dll에서 Windows openal32.dll 파일을 리눅스 아래 공유 라이브러리의 올바른 버전으로 가져옵니다. 제 경우는 libopenal.so.1입니다 (libopenal.so.1.13.0에 대한 링크 일뿐입니다).).