2009-11-24 16 views
14

कोड लिखने के लिए सर्वोत्तम प्रथाएं क्या हैं जिन्हें .NET (windows) और मोनो (लिनक्स) पर संकलित किया जा सकता है? हालांकि मैं .NET से बहुत परिचित हूं, मैं मोनो और उसके सभी गठिया में अनुभव नहीं करता हूं। क्या किसी ने इस पर एक अच्छा ब्लॉग पोस्ट या सर्वोत्तम प्रैक्टिस पेपर देखा है, जिसे मैं खोदने में सक्षम नहीं हूं? मैं सी # 3.0 स्तर की सुविधाओं के साथ चिपके रहूंगा।.NET/MONO क्रॉस संकलन के लिए सर्वोत्तम अभ्यास

जो चीजें मुझे चिंता करती हैं वह सभी इंटरऑप में से पहला है, क्योंकि मुझे कुछ देशी कोड कॉल करने की आवश्यकता होगी। अगला नामस्थान जैसे Mono.XXX को संभालने का सबसे अच्छा तरीका होगा। क्या मुझे #if का गुच्छा इस्तेमाल करना चाहिए? कोड प्रति प्लेटफार्म असेंबली में अलग करें?

आर्किटेक्चर और डिज़ाइन से संबंधित किसी भी सुझाव की सराहना की जाएगी! यदि आपको विजुअल स्टूडियो (किसी भी संस्करण) में लिनक्स/मोनो के लिए क्रॉस संकलन में कोई अनुभव है, तो मुझे इसमें भी रूचि होगी।

+0

क्रॉस संकलन गलत वाक्यांश है, आप इसे एक बार संकलित करते हैं और फिर दोनों प्लेटफॉर्म पर इसका उपयोग करते हैं। – trampster

+0

मुझे नहीं लगता कि यह सही है, यह देखते हुए कि मोनो में कई मोनो हैं। * नामस्थान, आदि शायद एक परिपूर्ण दुनिया में? –

+0

ठीक है, मैंने बिना किसी पी/Invoke के ध्वनि WinForms ऐप बनाया है (ध्वनि आसान है लेकिन पी/Invoke से बचना मुश्किल है) और यह लिनक्स पर पूरी तरह से ठीक चला गया।exe असेंबली वीएस -2010 का उत्पादन किया, और यह भी ताजा नई .NET 4 सुविधाओं का उपयोग किया था। –

उत्तर

7

मोनो समर्थित एपीआई के लिए सबसे बड़ा मुद्दों चिपके रहे हैं जाँच करें। मोनो में Visual Studio Integration समर्थन का उपयोग करके इसके साथ बहुत मदद मिल सकती है, क्योंकि आप सभी प्लेटफार्मों पर मोनो को पूरे समय लक्षित कर सकते हैं।

अपने विशिष्ट प्रश्नों के लिए:

1) इंटरऑप - आप पी/आह्वान करने के लिए छड़ी की आवश्यकता होगी। इसे अलग, प्लेटफार्म विशिष्ट असेंबली में अलग करने का प्रयास करें। इससे 2:

2) #if का उपयोग करके - मैं इससे बचूंगा, और एक्स्टेंसिबिलिटी मॉडल का उपयोग करना पसंद करूंगा। मोनो Managed Extensibility Framework का समर्थन करता है, जो रनटाइम पर प्लेटफ़ॉर्म विशिष्ट कोड "प्लग इन" करने का एक अच्छा तरीका प्रदान करता है।

+0

एक्स्टेंसिबिलिटी मॉडल के सूचक के लिए धन्यवाद। यह दिखाता है कि यह एक पूर्वावलोकन है, एक शिपिंग उत्पाद नहीं। उत्पाद को अंतिम रूप देने से पहले .NET और मोनो कार्यान्वयन सिंक में रहने की संभावना क्या है? दृश्य स्टूडियो एकीकरण प्लगइन निश्चित रूप से मदद करेगा, धन्यवाद। –

+0

एमईएफ ओपन सोर्स है, इसलिए मैं इसके बारे में ज्यादा चिंता नहीं करता। यह .NET 4 का हिस्सा बनने जा रहा है, और यह इस बिंदु पर काफी स्थिर है। हम इसे पहले से ही हमारे वाणिज्यिक उत्पाद में उपयोग करते हैं। –

+0

यह सबसे अच्छी सलाह है जिसे मैंने अभी तक एमईएफ के लिए मोनो को क्रॉस प्लेटफार्म के लिए इस्तेमाल किया है। –

2
+0

धन्यवाद। चूंकि यह नया कोड होगा, मुझे यकीन नहीं है कि क्या मैं इस टूल का उपयोग करूंगा (जब तक कि मुझे कुछ याद नहीं आ रहा है?)। दूसरे शब्दों में, मैं सीआई का उपयोग करने के लिए एक लिनक्स बनाता है दोनों खिड़कियों का निर्माण करने की योजना बना रहा हूं। –

+0

मोनो के कुछ हिस्सों हैं जो समाप्त नहीं हुए हैं। उदाहरण के लिए क्रिप्टोग्राफी में कुछ चीजें गायब हैं। उन विधियों/वर्गों को 'todo' विशेषताओं के साथ चिह्नित किया जाता है। मोमा उन लोगों को लागू नहीं करेगा जो आपके लिए लागू नहीं हैं। –

2

मोनो प्रोजेक्ट portability guidelines के साथ एक दस्तावेज़ प्रदान करता है। यह शुरू करने के लिए एक बहुत अच्छी जगह है।

+0

यदि यह ध्यान देने योग्य है कि यह दस्तावेज़ स्थानों में थोड़ा-सा पता लगाता है। इसका मतलब यह नहीं है कि यह उपयोगी जानकारी से भरा नहीं है। – Stewart

3

आप Prebuild द्वारा interrested किया जाना चाहिए: दृश्य स्टूडियो:

prebuild एक पार मंच एक्सएमएल संचालित पूर्व निर्माण उपकरण डेवलपर्स आसानी से प्रमुख आईडीई के और सहित नेट विकास उपकरण के लिए प्रोजेक्ट फ़ाइलें उत्पन्न करने के लिए अनुमति देता है जो है। नेट 2002, 2003, 2005, शार्प डेवलपमेंट, मोनो डेवेल, एनएएनटी और ऑटोोटूल।

+0

नीचे वोट क्यों? प्रीब्यूड प्रोजेक्ट .NET और मोनो प्लेटफॉर्म दोनों का उपयोग करके एक ही कोडबेस बनाए रखने के लिए बहुत आसान है। और यह मुफ़्त है। – Larry

0

हम विकास के लिए मोनो डेवलप और विजुअल स्टूडियो का उपयोग करते हैं, लेकिन एक ही शॉट (जोएल स्पॉल्स्की के नियम) पर पूरी चीज़ बनाने के लिए एक अच्छी NAnt बिल्ड स्क्रिप्ट के आसपास रखना महत्वपूर्ण है।

मुख्य बिंदु आईएमओ यह स्पष्ट करना है कि सॉफ़्टवेयर को क्रॉस-प्लेटफार्म होना चाहिए, इसलिए यह "लिनक्स/मोनो को पोर्टिंग" के बारे में नहीं है बल्कि वास्तव में आवश्यक प्लेटफ़ॉर्म पर प्रत्येक पुनरावृत्ति को विकसित करना है।

हमें शुरुआत में कुछ विशेषताओं से बचना था (अब वाणिज्यिक उत्पाद के लिए 5 साल के लिए मोनो/.NET का उपयोग करना) और हम अभी भी .NET Remoting से चिपके रहते हैं, लेकिन यह मेरे बहु-मंच विकास में एक बड़ा सौदा नहीं है राय।

लगभग एक वर्ष से मुलायम डीबगर पर गिनती भी एक बड़ी बात है।

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