क्या मोनो प्राइम टाइम के लिए तैयार है? [बन्द है]


314

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


17
Mindtouch.com बहुत मजबूत विकि प्लेटफॉर्म के लिए डेबियन पर मोनो पर C # का उपयोग कर रहा है। जाओ उन्हें बाहर की जाँच करें। तुम भी एक पूर्वनिर्धारित VM डाउनलोड कर सकते हैं कि आप आसानी से सेटअप और उपयोग कर सकते हैं।
लाम्कोरो

7
मैंने पाया है कि मोनो का सबसे अच्छा उपयोग यह कहने में सक्षम है, "अगर Microsoft XXX करता है, तो हम मोनो को यूनिक्स पर ले जा सकते हैं ..."
इयान रिंगरोज

5
मुझे लगता है कि इस सवाल को फिर से पूछा जाना चाहिए, जो इस एक के बाद से बदल गया है।
जूनोय

जवाबों:


402

विचार करने के लिए कुछ परिदृश्य हैं: (ए) यदि आप किसी मौजूदा एप्लिकेशन को पोर्ट कर रहे हैं और सोच रहे हैं कि क्या मोनो इस कार्य के लिए पर्याप्त है; (b) आप कुछ नए कोड लिखना शुरू कर रहे हैं, और आप जानना चाहते हैं कि मोनो पर्याप्त परिपक्व है या नहीं।

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

यदि आपका मूल्यांकन एक रिपोर्ट को उजागर करने वाली सुविधाओं के साथ वापस आता है जो गायब हैं या मोनो में उनके शब्दार्थों में काफी भिन्नता है, तो आपको मूल्यांकन करना होगा कि क्या कोड को अनुकूलित किया जा सकता है, फिर से लिखा जा सकता है या सबसे खराब स्थिति में हो सकता है कि आपका आवेदन कम कार्यक्षमता के साथ काम कर सकता है या नहीं।

उपयोगकर्ता प्रस्तुतियाँ (यह मेमोरी से है) के आधार पर हमारे मोमा के आँकड़ों के अनुसार, अनुप्रयोगों में से लगभग 50% बॉक्स से बाहर काम करते हैं, लगभग 25% को एक सप्ताह के काम के लायक होने की आवश्यकता होती है (रिफैक्टरिंग, एडैपिंग) अन्य 15% को गंभीर प्रतिबद्धता की आवश्यकता होती है आपके कोड के फिर से टुकड़े करना, और बाकी सिर्फ पोर्टिंग को परेशान करने के लायक नहीं है क्योंकि वे Win32 से इतने अविश्वसनीय रूप से बंधे हैं। उस बिंदु पर, या तो आप शून्य से शुरू करते हैं, या एक व्यावसायिक निर्णय आपके कोड को पोर्टेबल बनाने के लिए प्रयास करेगा, लेकिन हम महीनों काम करने के लायक हैं (कम से कम हमारे पास रिपोर्ट से)।

यदि आप खरोंच से शुरू कर रहे हैं, तो स्थिति बहुत सरल है, क्योंकि आप केवल मोनो में मौजूद एपीआई का उपयोग करेंगे। जब तक आप समर्थित स्टैक के साथ रहें (जो कि बहुत ज्यादा .NET 2.0 है, और 3.5 में सभी कोर अपग्रेड्स जिसमें LINQ और System.Core शामिल हैं, साथ ही किसी भी मोनो-प्लेटफॉर्म API के साथ) आप ठीक रहेंगे।

हर बार एक बार आप मोनो या सीमाओं में बग में दौड़ सकते हैं, और आपको उनके आसपास काम करना पड़ सकता है, लेकिन यह किसी भी अन्य प्रणाली से अलग नहीं है।

पोर्टेबिलिटी के लिए: ASP.NET एप्लिकेशन पोर्ट करने के लिए आसान हैं, क्योंकि जिनके पास Win32 पर कोई निर्भरता नहीं है और आप SQL सर्वर या अन्य लोकप्रिय डेटाबेस का उपयोग कर सकते हैं (मोनो के साथ बहुत सारे बंडल किए गए डेटाबेस प्रदाता हैं)।

Windows.Forms पोर्टिंग कभी-कभी पेचीदा होती है क्योंकि डेवलपर्स .NET सैंडबॉक्स से बचना पसंद करते हैं और पी / इनवॉइस को अपने दिमाग से बाहर निकालने के लिए इनवॉइस के रूप में उपयोगी होते हैं क्योंकि बदलते कर्सर को दो बीज़ियर पॉइंट के रूप में व्यक्त किया गया है जो कि विक्रम में बीसीडी फॉर्म में एनकोडेड है। या कुछ ऐसे ही कबाड़।


276
यह वह आदमी है कौन सोचता है ? मोनो के निर्माता ??? ... ओ इंतजार ..

15
@ दारासीर: LINQ मोनो पर काम करता है। यह विंडोज विशिष्ट नहीं है। तो आगे बढ़ो और लिनक्स की कोशिश करो।
जिफ़्रे

31
"चीजों के रूप में उपयोगी के रूप में बदलते कर्सर ब्लिंकिंग दर के रूप में व्यक्त दो bezier अंक एक wparam में बीसीडी रूप में एन्कोडेड" योग्य
usr

12
मोनो के लिए बहुत बहुत धन्यवाद ...
इवान प्लाइस

28
मिगुएल, इस पोस्ट पर एक अद्यतन प्राप्त करना अच्छा होगा ;-)
डेविड श्मिट

65

इसमें .NET 4.0 तक बहुत व्यापक कवरेज है और यहां तक ​​कि .NET 4.5 API से कुछ विशेषताएं भी शामिल हैं, लेकिन कुछ क्षेत्र ऐसे हैं, जिन्हें हमने अपग्रेड किए जाने के कारण लागू नहीं करने के लिए चुना है, नए विकल्प बनाए जा रहे हैं या गुंजाइश भी है विशाल। निम्नलिखित एपीआई मोनो में उपलब्ध नहीं हैं:

  • विंडोज प्रेजेंटेशन फाउंडेशन
  • Windows वर्कफ़्लो फ़ाउंडेशन (दोनों संस्करणों में से कोई भी नहीं)
  • इकाई की रूपरेखा
  • WSE1 / WSE2 "ऐड-ऑन" मानक वेब सेवा स्टैक के लिए

इसके अतिरिक्त, हमारा WCF कार्यान्वयन सिल्वरलाइट के समर्थन के लिए सीमित है।

अपनी विशिष्ट परियोजना के लिए जांच करने का सबसे आसान तरीका मोनो माइग्रेशन एनालाइज़र (MoMA) है । लाभ यह है कि यह उन मुद्दों की मोनो टीम को सूचित करेगा जो आपको मोनो (यदि कोई हो) का उपयोग करने से रोकेंगी, जो उन्हें अपने काम को प्राथमिकता देने की अनुमति देता है।

मैंने हाल ही में सबमॉनिक पर MoMA चलाया और केवल एक ही मुद्दा पाया - Nullable प्रकार का एक अजीब उपयोग। यह एक बड़ा कोडबेस है, इसलिए वहां कवरेज बहुत प्रभावशाली थी।

मोनो कई वाणिज्यिक और ओपन सोर्स उत्पादों के साथ सक्रिय उपयोग में है । यह कुछ बड़े अनुप्रयोगों में उपयोग में है, जैसे कि विकिपीडिया और मोज़िला डेवलपर केंद्र , और एम्बेडेड अनुप्रयोगों में इस्तेमाल किया गया है जैसे कि संसा एमपी 3 खिलाड़ियों और शक्तियों में हजारों प्रकाशित गेम।

भाषा स्तर पर, मोनो कंपाइलर C # 5.0 भाषा विनिर्देश के साथ पूरी तरह से अनुरूप है


39

यदि आप GTK # का उपयोग करने के लिए प्रतिबद्ध हैं, तो डेस्कटॉप पक्ष पर, मोनो बहुत अच्छा काम करता है। Windows.Forms कार्यान्वयन अभी भी थोड़ा छोटा है (उदाहरण के लिए, ट्रेयकन का काम नहीं) लेकिन यह एक लंबा सफर तय कर चुका है। इसके अलावा, GTK # विंडोज फॉर्म की तुलना में बेहतर टूलकिट है।

वेब साइट पर, मोनो ने अधिकांश साइटों को पूरी तरह से चलाने के लिए ASP.NET को पर्याप्त रूप से लागू किया है। यहां कठिनाई एक मेजबान को ढूंढ रही है, जिसमें mod_mono अपाचे पर स्थापित है, या यदि आप अपने होस्ट तक शेल का उपयोग करते हैं तो यह स्वयं कर रहे हैं।

किसी भी तरह, मोनो महान है, और स्थिर है।

क्रॉस प्लेटफ़ॉर्म प्रोग्राम बनाते समय याद रखने योग्य मुख्य बातें:

  • Windows.Forms के बजाय GTK # का उपयोग करें
  • अपने फ़ाइल नाम को ठीक से सुनिश्चित करना
  • का प्रयोग करें Path.Separatorhardcoding के बजाय "\", यह भी का उपयोग Environment.NewLineकरने के बजाय "\n"
  • Win32 API पर किसी P / Invoked कॉल का उपयोग न करें।
  • विंडोज रजिस्ट्री का उपयोग न करें।

2
Path.Separator अच्छी सलाह है, सिवाय इसके कि OS X पर मोनो है: '', '/' नहीं! हा! यह पुराना मैक ओएस (<= 9.0) विभाजक है। Wha? यूनिक्स / सभी तरह से है।
जारेड अपडेटाइक

3
मैं एनवायरनमेंट के साथ परेशान नहीं करता हूं। न्यूलाइन या पाथ.सेपरेटर, बस / और \ n का उपयोग करें। हर डेस्कटॉप सिस्टम वर्तमान में लोकप्रिय उपयोग में है (जब तक कि मुझे कुछ याद नहीं है), / और \ n का उपयोग करता है। विंडोज़ पसंद करता है \ n और \ n \ n पसंद करता है, लेकिन ख़ुशी से यूनिक्स वाले का उपयोग करेंगे।
Programmdude

23

मैं निजी तौर पर एक प्रमुख समय में मोनो का उपयोग करता हूं। मैं udp / tcp डेटा प्रोसेसिंग संबंधित कार्यों के गीगा-बाइट्स से निपटने वाले मोनो सर्वर चलाता हूं और अधिक खुश नहीं रह सकता।

ख़ासियतें हैं, और सबसे अधिक कष्टप्रद चीजों में से एक यह है कि आप मोनो की वर्तमान स्थिति के कारण अपनी एमएसबिल्ट फ़ाइलों को केवल "बिल्ड" नहीं कर सकते हैं:

  • MonoDevelop (IDE) के पास कुछ आंशिक msbuild समर्थन है, लेकिन मूल रूप से किसी भी "REAL" बिल्ड कॉर्क पर एक साधारण हैलो-वर्ल्ड (कस्टम बिल्ड कार्य, डायनेमिक "गुण" जैसे $ (सॉल्यूडिर) से परे कुछ वास्तविक नाम रखने के लिए वास्तविक कॉन्फ़िगरेशन होगा। -ends)
  • xbuild जो किया जाना चाहिए था मोनो आपूर्ति-MSBuild-पूरी तरह से संगत-निर्माण प्रणाली और भी अधिक भयानक वास्तव में जीयूआई, जो एक बहुत ही "अपरंपरागत" की स्थिति है का उपयोग कर से भी बदतर एक अनुभव है, इसलिए कमांड लाइन से बनाने जा रहा है लिनक्स वातावरण के लिए संघ ...

एक बार / अपने सामान को वास्तव में खरीदने के दौरान, आपको कोड के लिए कुछ जंगल भी देखने को मिल सकते हैं, जैसे कि समर्थित होना चाहिए:

  • संकलक कुछ निर्माणों पर बोर हो रहा है
  • और कुछ और उन्नत / नई .NET कक्षाएं आप (XLinq किसी को भी) की उम्मीद की बकवास फेंक रही हैं?
  • कुछ अपरिपक्व रनटाइम "सुविधाएँ" (x64 पर 3GB हीप सीमा ... WTF!)

लेकिन यह कहते हुए कि आम तौर पर बोलने वाली चीजें बहुत जल्दी काम करना शुरू कर देती हैं, और समाधान / वर्कअराउंड प्रचुर मात्रा में हैं

एक बार जब आप उन शुरुआती बाधाओं पर चले गए, तो मेरा अनुभव यह है कि मोनो आरओकेकेएस, और हर पुनरावृत्ति के साथ बेहतर हो रहा है

मेरे पास सर्वर हैं जो मोनो के साथ चल रहे हैं, प्रति दिन 300GB डेटा संसाधित करते हैं, टन / पी के साथ और आम तौर पर बहुत काम करते हैं और 5-6 महीने तक यूपी रहते हैं, यहां तक ​​कि "ब्लीडिंग एज" मोनो के साथ।

उम्मीद है की यह मदद करेगा।


1
क्या आप मुझे बता सकते हैं (यदि आप कर सकते हैं) आप किस वेबसाइट के बारे में बात कर रहे हैं?
बजे क्रिस्टोफ डेबोव

21

स्वीकृत उत्तर के लिए सिफारिशें अब थोड़ी हैं।

  • विंडोज़ फॉर्म कार्यान्वयन अब बहुत अच्छा है। ( पेंट.नेट के एक पोर्ट के लिए पेंट-मोनो देखें जो कि एक बहुत ही सम्मिलित विंडोज फॉर्म एप्लीकेशन है। जो कुछ आवश्यक था वह पी-इनवोक और असमर्थित सिस्टम कॉल के लिए एक एमुलेशन लेयर था)।
  • Path.Combine साथ ही Path.Sperator पथ और फ़ाइल नाम से जुड़ने के लिए।
  • विंडोज़ रजिस्ट्री ठीक है, जब तक कि आप इसे केवल अपने अनुप्रयोगों से डेटा संग्रहीत करने और पुनर्प्राप्त करने के लिए उपयोग कर रहे हैं (यानी आपको इससे विंडोज के बारे में कोई जानकारी नहीं मिल सकती है, क्योंकि यह मूल रूप से मोनो अनुप्रयोगों के लिए एक रजिस्ट्री है)।

अनुवर्ती के लिए +1 ... ऐसा लगता है कि यह पृष्ठ एक बार फिर पुराना हो सकता है, हालांकि।
हार्प जूल 8'10

1
हाँ, दो साल मोनो में एक जीवनकाल है जिस गति के साथ वे लोग काम करते हैं।
क्रिश एरिकसन

12

यदि आप भाग्य से बाहर WPFrr का उपयोग करना चाहते हैं, तो वर्तमान में इसे लागू करने की कोई योजना नहीं है।

http://www.mono-project.com/WPF


3
यह वास्तव में बहुत बुरा है। WPF एक अच्छा UI टूलकिट है।
जेपी रिचर्डसन

@JP रिचर्डसन मुझे वही मिलता है जो आपको मिल रहा है - प्रोग्रामिंग करते समय यह अच्छा है - लेकिन मैं इसे "सभ्य" नहीं कहूंगा अगर यह एक गैर-पोर्टेबल टूलकिट होने के इरादे से गर्भाधान से बनाया गया है।
व्याट8740

@ व्याट8740 मेरी टिप्पणी 10 साल पहले लिखी गई थी।
जेपी रिचर्डसन

@JP रिचर्डसन योग्य, मेरा बुरा। लेकिन यह अभी भी दस साल पहले भी पोर्टेबल होने का मतलब नहीं था।
व्याट8740

9

वैसे, मोनो महान है, लेकिन जहां तक ​​मैं देख सकता हूं, यह अस्थिर है। यह काम करता है, लेकिन दोष जब आप मोनो प्रक्रिया को एक गंभीर काम करने के लिए देते हैं।

TL; DR - यदि आप मोनो का उपयोग नहीं करते हैं:

  • मल्टीथ्रेड वातावरण में AppDomains (असेंबली लोड \ Unload) का उपयोग करें
  • 'लेट-इट-फेल' मॉडल को बनाए नहीं रख सकते
  • प्रक्रिया चलाने के दौरान कभी-कभी भारी-भार वाली घटनाओं का अनुभव करें

तो, तथ्य।

हम RHEL5, Ubuntu, और, मेरे दृष्टिकोण से मोनो-2.6.7 (.net v 3.5) का उपयोग करते हैं, यह नोवेल द्वारा निर्मित सबसे स्थिर संस्करण है। इसमें अनलोडिंग एपडोमेंस (सेगफॉल्ट्स) के साथ एक मुद्दा है, हालांकि, यह बहुत दुर्लभ है और यह, अब तक, स्वीकार्य है (हमारे द्वारा)।

ठीक है। लेकिन अगर आप .net 4.0 की सुविधाओं का उपयोग करना चाहते हैं, तो आपको संस्करण 2.10.x, या 3.x पर स्विच करना होगा, और यहीं से समस्याएं शुरू होंगी।

2.6.7 की तुलना में, नए संस्करणों का उपयोग करने के लिए अस्वीकार्य है। मैंने मोनो प्रतिष्ठानों के परीक्षण के लिए एक सरल तनाव परीक्षण एप्लिकेशन लिखा।

यह यहाँ है, उपयोग करने के निर्देश के साथ: https://github.com/head-thrash/stress_test_mono

इसमें थ्रेड पूल वर्कर थ्रेड्स का उपयोग किया गया है। कार्यकर्ता AppDomain को dll लोड करता है और कुछ गणित-कार्य करने की कोशिश करता है। कुछ काम कई-थ्रेडेड होते हैं, कुछ सिंगल होते हैं। लगभग सभी काम सीपीयू-बाउंड होते हैं, हालांकि डिस्क से फ़ाइलों के कुछ रीड होते हैं।

परिणाम बहुत अच्छे नहीं हैं। वास्तव में, संस्करण 3.0.12 के लिए:

  • sgen GC segfaults प्रक्रिया लगभग तुरंत
  • बोहम के साथ मोनो लंबे समय तक रहता है (2 से 5 घंटे तक), लेकिन अंततः सेगफॉल्ट्स

जैसा कि ऊपर बताया गया है, sgen gc सिर्फ काम नहीं करता है (स्रोत से निर्मित मोनो):

* Assertion: should not be reached at sgen-scan-object.h:111

Stacktrace:


Native stacktrace:

    mono() [0x4ab0ad]
    /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0) [0x2b61ea830cb0]
    /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x35) [0x2b61eaa74425]
    /lib/x86_64-linux-gnu/libc.so.6(abort+0x17b) [0x2b61eaa77b8b]
    mono() [0x62b49d]
    mono() [0x62b5d6]
    mono() [0x5d4f84]
    mono() [0x5cb0af]
    mono() [0x5cb2cc]
    mono() [0x5cccfd]
    mono() [0x5cd944]
    mono() [0x5d12b6]
    mono(mono_gc_collect+0x28) [0x5d16f8]
    mono(mono_domain_finalize+0x7c) [0x59fb1c]
    mono() [0x596ef0]
    mono() [0x616f13]
    mono() [0x626ee0]
    /lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a) [0x2b61ea828e9a]
    /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x2b61eab31ccd]

Boehm segfauls के लिए - उदाहरण के लिए (Ubuntu 13.04, मोनो स्रोत से निर्मित):

mono: mini-amd64.c:492: amd64_patch: Assertion `0' failed.
Stacktrace:
at <unknown> <0xffffffff>
at System.Collections.Generic.Dictionary`2.Init (int,System.Collections.Generic.IEqualityComparer`1<TKey>) [0x00012] in /home/bkmz/my/mono/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:264
at System.Collections.Generic.Dictionary`2..ctor () [0x00006] in /home/bkmz/my/mono/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:222
at System.Security.Cryptography.CryptoConfig/CryptoHandler..ctor (System.Collections.Generic.IDictionary`2<string, System.Type>,System.Collections.Generic.IDictionary`2<string, string>) [0x00014] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/Crypto
Config.cs:582
at System.Security.Cryptography.CryptoConfig.LoadConfig (string,System.Collections.Generic.IDictionary`2<string, System.Type>,System.Collections.Generic.IDictionary`2<string, string>) [0x00013] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoCo
nfig.cs:473
at System.Security.Cryptography.CryptoConfig.Initialize () [0x00697] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:457
at System.Security.Cryptography.CryptoConfig.CreateFromName (string,object[]) [0x00027] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:495
at System.Security.Cryptography.CryptoConfig.CreateFromName (string) [0x00000] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:484
at System.Security.Cryptography.RandomNumberGenerator.Create (string) [0x00000] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:59
at System.Security.Cryptography.RandomNumberGenerator.Create () [0x00000] in /home/bkmz/my/mono/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:53
at System.Guid.NewGuid () [0x0001e] in /home/bkmz/my/mono/mcs/class/corlib/System/Guid.cs:492

या (आरएचईएल 5, मोनो आरपीएम से लिया गया है यहां ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home%3A.vmas%3A/mono-centos5 )

Assertion at mini.c:3783, condition `code' not met
Stacktrace:
at <unknown> <0xffffffff>
at System.IO.StreamReader.ReadBuffer () [0x00012] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.IO/StreamReader.cs:394
at System.IO.StreamReader.Peek () [0x00006] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.IO/StreamReader.cs:429
at Mono.Xml.SmallXmlParser.Peek () [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/Mono.Xml/SmallXmlParser.cs:271
at Mono.Xml.SmallXmlParser.Parse (System.IO.TextReader,Mono.Xml.SmallXmlParser/IContentHandler) [0x00020] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/Mono.Xml/SmallXmlParser.cs:346
at System.Security.Cryptography.CryptoConfig.LoadConfig (string,System.Collections.Generic.IDictionary`2<string, System.Type>,System.Collections.Generic.IDictionary`2<string, string>) [0x00021] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptog
raphy/CryptoConfig.cs:475
at System.Security.Cryptography.CryptoConfig.Initialize () [0x00697] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:457
at System.Security.Cryptography.CryptoConfig.CreateFromName (string,object[]) [0x00027] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:495
at System.Security.Cryptography.CryptoConfig.CreateFromName (string) [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/CryptoConfig.cs:484
at System.Security.Cryptography.RandomNumberGenerator.Create (string) [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:59
at System.Security.Cryptography.RandomNumberGenerator.Create () [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Security.Cryptography/RandomNumberGenerator.cs:53
at System.Guid.NewGuid () [0x0001e] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System/Guid.cs:483
at System.Runtime.Remoting.RemotingServices.NewUri () [0x00020] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs:356
at System.Runtime.Remoting.RemotingServices.Marshal (System.MarshalByRefObject,string,System.Type) [0x000ba] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs:329
at System.AppDomain.GetMarshalledDomainObjRef () [0x00000] in /usr/src/redhat/BUILD/mono-3.0.3/mcs/class/corlib/System/AppDomain.cs:1363

दोनों विफलताएं किसी तरह से AppDomains तर्क से जुड़ी हैं, इसलिए, आपको मोनो में उनसे दूर रहना चाहिए।

BTW, परीक्षण किए गए प्रोग्राम ने बिना किसी असफलता के MS .NET 4.5 env में विंडोज मशीन पर 24 घंटे काम किया।

इसलिए, निष्कर्ष में, मैं कहना चाहूंगा - सावधानी के साथ मोनो का उपयोग करें। यह पहली नज़र से काम करता है, लेकिन जब भी आसानी से विफल हो सकता है। आप ओपन सोर्स परियोजनाओं में कोर डंप और प्रमुख विश्वास हानि के एक समूह के साथ छोड़ दिया जाएगा।


क्या आपने ज़ामरीन बुगज़िला में बग दर्ज करने की कोशिश की है ?
MiKom



5

MoMA इसके लिए एक बढ़िया टूल है, जैसा कि किसी और ने सुझाया है। इन दिनों असंगति के सबसे बड़े स्रोत वे अनुप्रयोग हैं जो डेलीआईएमपोर्ट (या पी / इनवोक) में Win32 पुस्तकालयों में हैं। कुछ विधानसभाओं को लागू नहीं किया गया है, लेकिन उनमें से अधिकांश विंडोज-केवल हैं और वास्तव में लिनक्स पर कोई मतलब नहीं होगा। मुझे लगता है कि यह कहना काफी सुरक्षित है कि अधिकांश ASP.NET अनुप्रयोग सीमित संशोधनों के साथ मोनो पर चल सकते हैं।

(प्रकटीकरण: मैंने स्वयं मोनो के लिए योगदान दिया है, साथ ही इसके ऊपर चलने वाले लिखित एप्लिकेशन भी।)


4
यही कारण है कि किसी को भी अपने सिर को खरोंचने के लिए मोनो माइग्रेशन विश्लेषक यह सोचता है कि आधुनिक कला संग्रहालय के साथ इसका क्या करना है।
फेर्रूकियो

4

कई मामलों में, आप मौजूदा कोड ले सकते हैं और बस इसे मोनो पर चला सकते हैं, खासकर यदि आप ASP.NET एप्लिकेशन को पोर्ट कर रहे हैं।

कुछ मामलों में, आपको इसे काम करने के लिए कोड के पूरे नए अनुभागों की आवश्यकता हो सकती है। यदि आप System.Windows.Forms का उपयोग करते हैं, उदाहरण के लिए, एप्लिकेशन अनमॉडिफाइड नहीं होगा। इसी तरह यदि आप किसी विंडोज-विशिष्ट कोड (उदाहरण के लिए रजिस्ट्री एक्सेस कोड) का उपयोग करते हैं। लेकिन मुझे लगता है कि सबसे खराब अपराधी UI कोड है। यह विशेष रूप से Macintosh सिस्टम पर बुरा है।


4

हम इसे यहां एक परियोजना के लिए काम में ले रहे हैं, जिसे लिनक्स पर चलाने की जरूरत है लेकिन कुछ .NET पुस्तकालयों का पुन: उपयोग करें जिन्हें हमने प्रबंधित C ++ में बनाया है। मुझे बहुत आश्चर्य हुआ है कि इसने कितना अच्छा काम किया है। हमारा मुख्य निष्पादन योग्य C # में लिखा जा रहा है और हम बिना किसी समस्या के हमारे प्रबंधित C ++ बायनेरिज़ का संदर्भ दे सकते हैं। विंडोज और लिनक्स के बीच C # कोड में एकमात्र अंतर RS232 सीरियल पोर्ट कोड है।

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


तो आप सीरियल पोर्ट के लिए कोड कैसे लिखते हैं जो दोनों को संभालता है? सीएलआर / मोनो का संपूर्ण बिंदु प्लेटफ़ॉर्म स्वतंत्र होना है, है ना? क्या यह कॉन्फिग फाइलों में किया जाता है?
टिम

2

क्या आप जानते हैं कि विंडोज फॉर्म 2.0 के लिए मोनो 2.0 पूर्वावलोकन का समर्थन कितना अच्छा है?

मैंने इसके साथ जो थोड़ा सा खेला है, वह अपेक्षाकृत पूर्ण और लगभग प्रयोग करने योग्य लग रहा था। यह अभी कुछ जगहों पर बिलकुल सही नहीं लगता है और अभी भी थोड़ा हिट या समग्र रूप से याद नहीं है। इसने मुझे आश्चर्यचकित किया कि इसने हमारे कुछ रूपों के साथ काम किया, हालांकि ईमानदारी से।


2

हाँ, यह निश्चित रूप से (यदि आप सावधान हालांकि रहे हैं) है हम रा-अजाक्स में मोनो का समर्थन (अजाक्स पुस्तकालय में पाया http://ra-ajax.org करते हैं और हम ज्यादातर समस्याओं का सामना नहीं कर रहे हैं। आपको WSE इत्यादि .Net जैसे "सबसे पागल चीजों" में से कुछ के साथ सावधान रहने की आवश्यकता है, और संभवतः आपकी कुछ मौजूदा परियोजनाएं भी 100% मोनो संगत नहीं होंगी, लेकिन यदि आप विकास के दौरान उनका परीक्षण करते हैं तो नई परियोजनाएं ज्यादातर मोनो के साथ समस्याओं के बिना संगत हो। और मोनो का उपयोग करके लिनक्स आदि का समर्थन करने से लाभ वास्तव में अच्छा है;)

मोनो का समर्थन करने के रहस्य का एक बड़ा हिस्सा मुझे लगता है कि शुरुआत से ही सही उपकरण का उपयोग करना है, जैसे कि ActiveRecord, log4net, ra-ajax आदि ...


2

आवेदन के प्रकार के लिए हम निर्माण कर रहे हैं दुर्भाग्य से उत्पादन के लिए तैयार नहीं लगता है। हम समग्र रूप से इससे प्रभावित थे, और विंडोज और ईसी 2 मशीनों पर इसके प्रदर्शन से प्रभावित थे, हालांकि, हमारा कार्यक्रम विंडोज और लिनक्स दोनों पर कचरा संग्रह त्रुटियों के साथ दुर्घटनाग्रस्त हो गया।

त्रुटि संदेश है: "जीसी में घातक त्रुटियां: बहुत अधिक ढेर अनुभाग", यहां किसी और के लिए एक लिंक है जो समस्या का थोड़ा अलग तरीके से अनुभव कर रहा है:

http://bugzilla.novell.com/show_bug.cgi?id=435906

मोनो में हमारे द्वारा चलाए गए कोड का पहला टुकड़ा एक सरल प्रोग्रामिंग चुनौती थी जिसे हमने विकसित किया था ... कोड लगभग 10mb डेटा को कुछ डेटा संरचनाओं (जैसे हैशसेट) में लोड करता है, फिर डेटा के खिलाफ 10 क्वेरी चलाता है। हमने उन्हें समय पर और औसत पाने के लिए 100 बार प्रश्नों को चलाया।

कोड विंडोज पर 55 वीं क्वेरी के आसपास क्रैश हो गया। लिनक्स पर यह काम करता है, लेकिन जैसे ही हम एक बड़े डेटा सेट में चले गए, यह भी दुर्घटनाग्रस्त हो जाएगा।

यह कोड बहुत सरल है, उदाहरण के लिए कुछ डेटा को HashSets में डालें और फिर उन HashSets आदि को क्वेरी करें, सभी देशी c #, कुछ भी असुरक्षित नहीं, कोई API कॉल नहीं। Microsoft CLR पर यह कभी क्रैश नहीं होता है, और केवल ठीक समय पर भारी डेटा सेट पर चलता है।

हमारे लोगों में से एक ने मिगुएल को ईमेल किया और उस कोड को शामिल किया जिसने समस्या का कारण बनाया, अभी तक कोई प्रतिक्रिया नहीं हुई। :(

ऐसा भी लगता है कि कई अन्य लोगों ने समाधान के बिना इस समस्या का सामना किया है - एक समाधान को विभिन्न जीसी सेटिंग्स के साथ मोनो को फिर से जोड़ने का सुझाव दिया गया है, लेकिन यह सिर्फ उस सीमा को बढ़ाने के लिए प्रकट होता है जिससे पहले यह दुर्घटनाग्रस्त हो जाती है।


9
बगज़िला बग्स की रिपोर्ट करने की जगह है: मिगुएल बेहद व्यस्त हैं और कोई भी उन्हें व्यक्तिगत बग रिपोर्ट भेजने वाले सभी के साथ रख सकता है। यदि आप नमूना कोड प्रकाशित नहीं कर सकते हैं, तो आपको बगज़िला में समस्या की रिपोर्ट करनी चाहिए और ध्यान दें कि आपने नमूना को मिगुएल या मुझे (lupus@ximian.com) भेजा है।
ल्यूपस

2

बस www.plasticscm.com की जाँच करें। सब कुछ (क्लाइंट, सर्वर, जीयूआई, मर्ज टूल) मोनो पर लिखा गया है।


1

यह वास्तव में .NET फ्रेमवर्क से आपके द्वारा उपयोग किए जाने वाले नामस्थानों और वर्गों पर निर्भर करता है। मुझे अपने ईमेल सर्वर पर चलने के लिए अपनी एक विंडोज़ सेवाओं को परिवर्तित करने में रुचि थी, जो कि Suse है, लेकिन हम API के साथ कई कठिन बाधाओं में भाग गए जिन्हें पूरी तरह से लागू नहीं किया गया था। मोनो वेबसाइट पर कहीं एक चार्ट है जो सभी वर्गों और उनके पूरा होने के स्तर को सूचीबद्ध करता है। यदि आपका आवेदन कवर किया गया है, तो इसके लिए जाएं।

किसी भी अन्य एप्लिकेशन की तरह, पूर्ण प्रतिबद्धता बनाने से पहले प्रोटोटाइप और परीक्षण जरूर करें।

एक अन्य समस्या जिसका हम लाइसेंस सॉफ्टवेयर में भाग कर रहे थे: यदि आप किसी और के DLL को संदर्भित कर रहे हैं, तो आप उस असेंबली में असंगतता के इर्द-गिर्द अपना रास्ता नहीं बना सकते जो उस विधानसभा में दफन है।


1

मैं तब कल्पना करता हूं कि यदि आपके पास कुछ 3 पार्टी घटकों के साथ एक आवेदन है तो आप भरवां सकते हैं। मुझे संदेह है कि बहुत सारे विक्रेताओं मोनो को ध्यान में रखते हुए विकसित होंगे

उदाहरण: http://community.devexpress.com/forums/p/55085/185853.aspx


1

नहीं, गंभीर काम के लिए मोनो तैयार नहीं है। मैंने F # का उपयोग करके विंडोज पर कुछ प्रोग्राम लिखे और उन्हें मोनो पर चलाया। उन प्रोग्राम में डिस्क, मेमोरी और सीपीयू का उपयोग काफी तीव्रता से किया गया था। मैंने मोनो पुस्तकालयों (प्रबंधित कोड) में क्रैश देखा, देशी कोड में क्रैश और वर्चुअल मशीन में क्रैश। जब मोनो ने काम किया तो विंडोज में .net की तुलना में प्रोग्राम कम से कम दो गुना धीमे थे और बहुत अधिक मेमोरी का उपयोग किया। गंभीर काम के लिए मोनो से दूर रहें।


4
यह एक वास्तविक सबूत है जिसे तथ्य के रूप में प्रस्तुत किया गया है और यह FUD के रूप में मेरे सामने आता है
फायरग्रैस

वास्तव में ASP.NET IIS की तुलना में nginx / fast-cgi के तहत तेजी से चल सकता है। यह सब इस बात पर निर्भर करता है कि फ्रेमवर्क के किस हिस्से को अच्छी तरह से जांचा / परखा गया है: mono-project.com/Compatibility । @Firegrass से सहमत होना चाहिए।
रुई मार्केस

1
यह एक व्यक्ति के व्यक्तिगत अनुभव को इस प्रकार प्रस्तुत किया गया है। "मुझे लगता है" के साथ इसे उपसर्ग के अपवाद के साथ इस चर्चा में एक मान्य योगदान है।
अमीर अबीरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.