2012-12-19 32 views
14

मेरे पास एक बुनियादी सवाल है, हो सकता है कि यह इतना स्पष्ट हो लेकिन किसी कारण से मैं कोड अनुबंधों को स्थापित करने और उपयोग करने में सफल नहीं लग रहा हूं।कोड अनुबंधों को कैसे स्थापित और उपयोग करें?

मैं MSDN से पैकेज डाउनलोड किया है, ऑनलाइन प्रलेखन निम्नलिखित इसे स्थापित लेकिन मैं अभी भी नीचे कोड बयान के लिए एक IDE चेतावनी मिलती है:

Contract.Requires(inputParameter != "");

आईडीई चेतावनी है:

"विधि आमंत्रण छोड़ दिया गया है। कंपाइलर विधि आमंत्रण उत्पन्न नहीं करेगा क्योंकि विधि सशर्त है, या यह कार्यान्वयन के बिना आंशिक विधि है"

कोड अनुबंध सक्षम करने की प्रक्रिया में मुझे कुछ भी याद आ रहा है? मैं वीएस -2010 अल्टीमेट एसपी 1

+1

शायद यह मदद कर सकता है: http: // stackoverflow।कॉम/प्रश्न/3461972/एम-आई-कार्यान्वयन-यह-सरल-अनुबंध-गलत –

+1

@ एड्रियनफैसीयू: धन्यवाद, पोस्ट ने कारण समझाया और इसका समाधान मेरे लिए काम कर रहा है। बस प्रोजेक्ट प्रीप्रोसेसर परिभाषा पर 'CONTRACTS_FULL' को परिभाषित करें, क्योंकि कोड अनुबंध प्लग-इन ठीक से काम नहीं कर रहा है। – NirMH

उत्तर

12

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

मैंने चेतावनी देखी है कि कोड संविदा Build पर सेट नहीं होने पर आपको विस्तार से पता चला है।

यदि आपको कोड अनुबंध टैब नहीं दिखाई देता है, तो आपको अपनी मशीन पर कोड अनुबंध स्थापित करने की आवश्यकता हो सकती है। here से इंस्टॉलर को डाउनलोड और इंस्टॉल करके ऐसा करें।

4

सशर्त संकलन सभी संकलक प्रीप्रोसेसर परिभाषाओं से प्रेरित है। DEBUG स्थिरता के लिए यह वही दृष्टिकोण है, हालांकि विजुअल स्टूडियो उस चेकबॉक्स के पीछे की परिभाषा को छुपाता है। यह एक कुशल दृष्टिकोण है क्योंकि जब उन प्रतीकों को परिभाषित नहीं किया जाता है तो विधियों को बिल्कुल नहीं कहा जाता है; महत्वपूर्ण रूप से पारित होने वाले पैरामीटर का मूल्यांकन नहीं किया जाता है, इसलिए आप रिहाई के निर्माण को धीमा करने वाले उन चेकों के बारे में चिंता किए बिना अपने कोड अनुबंधों में अपेक्षाकृत महंगे चेक का उपयोग कर सकते हैं।

Microsoft's introduction to Code Contracts इस कहते हैं:

अनुबंध कक्षा में सबसे तरीकों सशर्त संकलित कर रहे हैं; यानी, कंपाइलर केवल इन विधियों को कॉल करता है जब आप #define निर्देश का उपयोग कर एक विशेष प्रतीक, CONTRACTS_FULL को परिभाषित करते हैं। CONTRACTS_FULL आपको #ifdef निर्देशों का उपयोग किए बिना अपने कोड में अनुबंध लिखने देता है; आप विभिन्न निर्माण, कुछ अनुबंधों के साथ, और कुछ के बिना उत्पादन कर सकते हैं।

हालांकि इस कोड में #define का उपयोग कर कोड ठेके को चालू करने के बारे में बात करती:

#define CONTRACTS_FULL 

रूप @NirMH टिप्पणी में कहा कि यह आम तौर पर तो इस परियोजना के लिए सशर्त संकलन प्रतीकों में इसे परिभाषित करने की बेहतर है आप इसे दूसरों के लिए कुछ बनाता है और बंद कर सकते हैं।

Conditional compilation settings

ध्यान दें कि CONTRACTS_FULL ही एकमात्र विकल्प आपके पास है, हालांकि यह स्पष्ट रूप से भविष्य में और अधिक विस्तृत नियंत्रण रखने की संभावना अनुमति देने के लिए नामित किया गया है।