2010-01-19 8 views
7

ऐसा लगता है कि स्थानीय कॉन्फ़िगरेशन फ़ाइल में मोनो dllmaps को अनदेखा करता है।मोनो app.config फ़ाइल में dllmaps को अनदेखा करता है

मैं अपने .NET अनुप्रयोग को लिनक्स (उबंटू) पर पोर्ट करना चाहता हूं जो देशी पुस्तकालयों को कॉल करता है, इसलिए मेरे कोड को काम करने के लिए मेरे पास dllmaps है। मोनो डॉक्स का कहना है कि आपको something.exe के लिए कुछ.exe.config बनाना है और इसमें एप्लिकेशन विशिष्ट कॉन्फ़िगरेशन डालना है। यह फ़ाइल को पार करता है (क्योंकि यह शिकायत करता है कि अगर मैं इसमें कुछ वर्तनी गलती करता हूं) और फ़ाइल नाम सही है लेकिन ऐसा लगता है कि यह dllmaps को अनदेखा करता है।

कॉन्फ़िग फ़ाइल सरल है:

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

मोनो openal32.dll नहीं मिल रहा है और DllNotFoundException फेंकता है। लेकिन अगर मैं मुख्य/etc/mono/config फ़ाइल में उस dllmap प्रविष्टि की प्रतिलिपि बनाता हूं तो सबकुछ ठीक है। यदि $ MONO_LOG_LEVEL = डीबग मोनो करें ... यह देखने के लिए चाल करें कि यह क्या करता है और मुझे लगता है कि libopenal.so को लोड करने का कोई प्रयास नहीं है। लेकिन कई libopenal32.dll, ./libopenal32.dll libopenal32.so, openal32.so, आदि फ़ाइलों को लोड करने का प्रयास करते हैं।

शायद मैं फिर से एक मोनो बग में भाग गया?

मैं इस कॉन्फ़िगरेशन फ़ाइल को संग्रह में पैक करना चाहता हूं और मैं अपने उपयोगकर्ताओं को/etc/mono/config फ़ाइल से गड़बड़ नहीं करना चाहता हूं।

कोई भी विचार?

उत्तर

7

क्या आपके सभी DllImport "openal32.dll" का उपयोग कर कोड में विशेषताएँ हैं या कुछ इसके बजाय "openal32" का उपयोग कर रहे हैं? किसी भी मामले में कॉन्फ़िगरेशन फ़ाइल उस असेंबली को संदर्भित करती है जिसमें P/Invoke विधियां हैं: सबसे संभावित समस्या यह है कि आपने मुख्य असेंबली के लिए कॉन्फ़िगर बनाया है जबकि पी/Invoke विधियां एक अलग लाइब्रेरी असेंबली में हैं। बस फ़ाइल को OpenAlUsingAssembly.dll.config पर पुनर्नामित करें।

+0

यह समस्या थी ... मैंने गलत असेंबली में कॉन्फ़िगरेशन फ़ाइल लिखा था। मेरे संदर्भों में से एक डीएल का मुख्य आवेदन नहीं है। – Calmarius

+0

+1 आपके पास एक उज्ज्वल भावी लेखन मोनो डेबफुस्केशन डॉक्स है। :) –

1

उबंटू 12.04 के तहत अपना ओपनएएल (वास्तव में ओपनटीके) परीक्षण कार्यक्रम चलाने की कोशिश करते समय मुझे एक ही समस्या थी। अंत में सब मुझे क्या करना जरूरी था:

sudo apt-get install libopenal1 

आदेश OpenAL रन-टाइम पुस्तकालयों और फिर OpenTK.dll.config नामक एक फ़ाइल युक्त बनाने के लिए: कौन सा मैप किया

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

windows openal32.dll फ़ाइल से OpenTK.dll में आयात लिनक्स के तहत साझा लाइब्रेरी के सही संस्करण में आयात करता है, जो मेरा मामला libopenal.so.1 है (जो वास्तव में libopenal.so.1.13.0 का एक लिंक प्रतीत होता है)।

संबंधित मुद्दे