2013-03-05 6 views
6

MonoGame (एक रूपरेखा जो मूल रूप से विंडोज फोन 8 के लिए XNA लाता है) सब यह Microsoft.Xna.Framework साथ उपसर्ग नामस्थान है है मैं जब करने के लिए अपने XNA एप्लिकेशन पोर्टिंग आवश्यक कोड में परिवर्तन की मात्रा को कम करने के लिए विश्वास करते हैं MonoGame।अस्पष्ट संदर्भ नामस्थान

मेरा मुद्दा यह है कि, मैं Microphone कक्षा तक पहुंच बनाना चाहता हूं, क्योंकि, अभी तक मोनोमेम में नहीं बनाया गया है, मुझे इसे आधिकारिक माइक्रोसॉफ्ट एक्सएनए कक्षा में से उपयोग करना है, इसके लिए स्पष्ट रूप से मजबूर हटाने की आवश्यकता है मानक Microsoft.XNA.Framework.dll .csproj के संदर्भ में संदर्भ है कि मेरा मोनोमेम टेम्पलेट विवादों से बचने के लिए सेटअप किया गया है, जो बहुत अच्छा काम करता है और अब Microphone पहुंच योग्य है, लेकिन ऐसा करने में मैंने कुछ प्रमुख वर्गों के बीच अस्पष्टता बनाई है जो दोनों माइक्रोसॉफ्ट मानक मुद्दे और मोनोमेम में मौजूद हैं।

त्रुटियों मैं प्राप्त कर रहा हैं:

अस्पष्ट संदर्भ:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

यह स्पष्ट रूप से क्योंकि बगल में आ गई है मानक माइक्रोसॉफ्ट द्वारा जारी एक्सएनए लाइब्रेरी, मेरे पास MonoGame.Framework.dll का संदर्भ है जो इस अस्पष्टता को बनाते हुए नामस्थान को कमांडर करता है। हालांकि, सभी मामलों में, मैं मोनोगेम संस्करण तक पहुंच बनाना चाहता हूं।

कोई विचार है कि मैं Color और Vector2 कक्षा के मोनोगेम संस्करण का उपयोग करने के लिए संकलक को स्पष्ट रूप से कैसे बता सकता हूं, न कि आधिकारिक माइक्रोसॉफ्ट एक?

using Color = Microsoft.Xna.Framework में कोई भी प्रयास स्पष्ट रूप से काम नहीं करेगा क्योंकि वे दोनों संकलित डीएलएस में लेबल किए गए हैं!

+0

यदि नामस्थान समान हैं तो ऐसा लगता है कि आपको एक अलग नामस्थान का उपयोग करने के लिए मोनोमेम को दोबारा जोड़ना होगा। एकमात्र अन्य विकल्प उन तरीकों के लिए एक रैपर बनाना है जो आप उपयोग करना चाहते हैं। सुनिश्चित करें कि आप स्पष्ट हैं कि आप इस संदर्भ में वास्तव में किस संदर्भ में उपयोग करना चाहते हैं। मैं XNA का उपयोग करने के संबंध में भी आपको सावधानी बरतूंगा क्योंकि माइक्रोसॉफ्ट ने मूल रूप से इसके विकास को बंद कर दिया है। –

+0

धन्यवाद, मैं एक रैपर पर विचार करूंगा .. बस कुछ और सुंदर के लिए उम्मीद कर रहा हूँ। – GONeale

+0

आप दोनों संदर्भों का उपयोग करना चाहते हैं और वे दोनों समान नामस्थान साझा करते हैं, समस्या यह है कि समस्या मोनोगेम के साथ एक सुरुचिपूर्ण समाधान नहीं है। निस्संदेह मुझे गंभीर नामस्थान पर संदेह है कि 'माइक्रोसॉफ्ट.एक्सना.फ्रेमवर्क' है।रंग 'आपको यह निर्धारित करने के लिए कोड को देखना होगा कि वास्तव में यह क्या है। –

उत्तर

8

इस विशिष्ट समस्या को हल करने का तरीका extern alias (MSDN, tutorial) का उपयोग कर है।

इस तरह आप माइक्रोसॉफ्ट एक्सएनए डीएलएल को उपनाम कर सकते हैं और कक्षा के लिए उचित using कथन निर्दिष्ट कर सकते हैं। मोनोगेम को सामान्य के रूप में उपयोग करना जारी रखें।

शायद इस तकनीक का उपयोग करते हुए नामस्थान Microsoft.Xna.Framework.Audio में Microphone नामक अपनी खुद की रैपर कक्षा बनाने के लिए एक बेहतर समाधान हो सकता है। इसे एक अलग असेंबली में रखें ताकि आपको extern alias सामान के साथ अपने मुख्य स्रोत कोड को प्रदूषित न करना पड़े।

(बेशक, इस सवाल का जवाब कैसे सफल आप इस तरह से MonoGame और XNA मिश्रण में हो सकता है के बारे में कुछ नहीं कहता;)

आदर्श तरीका, ज़ाहिर है, वास्तव में MonoGame के लिए Microphone को लागू करने और यह योगदान करने के लिए है कार्यक्षमता के अनुसार। उम्मीद है कि यह काम करता है।)

+0

अरे एंड्रयू, आपके उत्तर और जी/सी से बधाई के लिए धन्यवाद :) केवल आपके बारे में एक घंटा ....;) विल जब मैं घर लौटता हूं, तो 'बाहरी ऊर्फ' को जाने दो, धन्यवाद। – GONeale

+0

आह .. आप "डार्क" मीठे लेखक थे :) मैंने सोचा था कि आपका नाम परिचित लग रहा है ... – GONeale

+0

बढ़िया! मैंने बाहरी उपनाम को जाने का सबसे अच्छा तरीका पाया, अब मेरे पास निम्न घोषित किया गया है, जबकि वर्बोज़, मैं एक रैपर लाइब्रेरी को बनाए रखने से ज्यादा पसंद करता हूं: 'मोनोगेम फ्रेमवर्क :: माइक्रोसॉफ्ट.एक्सना.फ्रेमवर्क। ग्राफिक्स डेविस मैनेजर ग्राफिक्स; मोनोगेमफ्रेमवर्क :: माइक्रोसॉफ्ट.एक्सना.फ्रेमवर्क। ग्राफिक्स। प्रोटेबैच स्प्राइट बैच; निजी मोनोमेमफ्रेमवर्क :: माइक्रोसॉफ्ट.एक्सना.फ्रेमवर्क। ग्राफिक्स। प्रोटेफॉन्ट स्प्राइटफॉन्ट; निजी माइक्रोफोन माइक्रो = माइक्रोफोन। डीफॉल्ट; ' इसने मुझे WP8 और MonoGame वाले द्वारा प्रदान की गई मानक Microsoft.XNA.Framework कक्षाओं का उपयोग करने की अनुमति दी है, सुझाव के लिए फिर से धन्यवाद! – GONeale

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