2013-03-26 5 views
7

का उपयोग क्यों करते हैं हाल ही में मैंने वेब पर कुछ कोडिंग देखा। मैंने पाया कि कुछ लोग Microsoft.VisualBasic.CompilerServices.ProjectData.ProjectData कक्षा catch ब्लॉक में उपयोग करते हैं।लोग प्रोजेक्टडाटा

catch (Exception exception1) 
     { 
      //ProjectData.SetProjectError(exception1); 
      Console.WriteLine(exception1.ToString()); 
      Console.WriteLine(); 
      Console.WriteLine(sSQL); 
      //ProjectData.ClearProjectError(); 
     } 

मैं MSDN कि उल्लेख किया है कि इस एपीआई .नेट फ्रेमवर्क बुनियादी सुविधाओं का समर्थन करता है और अपने कोड से सीधे इस्तेमाल किया जा करने का इरादा नहीं है पर यह खोज की।

मुझे उत्सुकता है कि लोग इसका उपयोग किस कारण करते हैं। क्या आप इसे मुझे समझाएंगे?

+0

, मेरा मानना ​​है कि लेखक इस अपवाद को एक आंतरिक वीबी त्रुटि के रूप में सेट करने का प्रयास कर रहा है। प्रश्न शायद उस कोड के लेखक के पास जाना चाहिए जिसका आप उल्लेख कर रहे हैं। – Dhawalk

+0

यदि आप एक परावर्तक का उपयोग कर वीबी में निर्मित एक असेंबली को संकुचित करते हैं, तो आप पाएंगे कि वीबी कंपाइलर चुपचाप ऐसी कई कॉल इंजेक्ट करता है –

उत्तर

7

मेरा अनुभव यह रहा है कि इस प्रकार का कोड उपयोग सी #/वीबी.नेट परियोजनाओं में पाया जाता है जिसे वीबी 6 से परिवर्तित किया गया है। नए सी #/वीबी.नेट समाधान/परियोजनाओं का विकास करते समय, इस अभ्यास का उपयोग नहीं किया जाना चाहिए।

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

2

यह कोड या तो एक कोड रूपांतरण उपकरण द्वारा उत्सर्जित किया गया है जो VB कोड को C# में परिवर्तित कर दिया गया है, या इसके परिणामस्वरूप मूल रूप से वीबी का उपयोग करके बनाई गई असेंबली को अपनाने से परिणाम मिला है।

मैं मोनो करने के लिए एक वीबी परियोजना पोर्टिंग रहा हूँ, और पता चला कि वीबी संकलक इन कॉल ProjectData.SetProjectError(exception) और किसी भी कैच ब्लॉक में ProjectData.ClearProjectError() injects, और क्योंकि मोनो नहीं है ऐसा करने से संकलक को रोकने के लिए एक रास्ता खोजने की कोशिश ProjectData मॉड्यूल को लागू करें। और मेरा शोध करते समय आपका प्रश्न मिला!

0

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

पकड़ (अपवाद exception1) // किसी भी अपवाद है कि बस किसी को वास्तव में

 ProjectData.ClearProjectError(); //clear the err object 
    } 

जाँच करने के लिए के रूप में आप देख सकते हैं यह पूरी तरह से है चाहता है, तो // अं वस्तु में

{ 

     ProjectData.SetProjectError(exception1); // set the information 

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

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