2009-02-24 13 views
7

मैं एक परियोजना के लिए एक लघु श्रेणी जनरेटर बनाने के लिए देख रहा हूँ। मैं कोडडॉम के बारे में पढ़ रहा हूं, इसलिए कक्षाओं को बनाने का अर्थशास्त्र एक मुद्दा नहीं प्रतीत होता है, लेकिन यह सुनिश्चित नहीं है कि पीढ़ी को विकास और तैनाती प्रक्रिया में सर्वोत्तम तरीके से कैसे एकीकृत किया जाए।सी # कोड जनरेशन

  1. मुझे कक्षाओं के निर्माण को कैसे ट्रिगर करना चाहिए? मैंने पढ़ा है कि यह निर्माण प्रक्रिया का हिस्सा होना चाहिए, मुझे यह कैसे करना चाहिए?

  2. कक्षाएं कहां बनाई जानी चाहिए? मैंने पढ़ा है कि फ़ाइलों को हाथ से संपादित नहीं किया जाना चाहिए, और कभी भी स्रोत नियंत्रण में चेक नहीं किया जाना चाहिए। क्या मुझे इसके बारे में भी चिंता करनी चाहिए और जनरेटर इंजन के रूप में कक्षाओं को उसी निर्देशिका में उत्पन्न करना चाहिए?

उत्तर

0

आपके प्रश्न का उत्तर आंशिक रूप से आपके जेनरेट किए गए वर्गों के उद्देश्य पर निर्भर करता है।

यदि कक्षा विकास के हिस्से के रूप में उत्पन्न की जाती है, तो उन्हें टेक्स्ट फ़ाइलों के रूप में जनरेट किया जाना चाहिए और किसी भी अन्य वर्ग की तरह अपने एससीएम में चेक किया जाना चाहिए।

यदि आपकी कक्षाएं आपके सिस्टम के संचालन के हिस्से के रूप में गतिशील रूप से रनटाइम पर उत्पन्न होती हैं, तो मैं कोडडॉम का उपयोग नहीं करता। मैं प्रतिबिंब का उपयोग करता हूँ।

8

टी 4 टेम्पलेट्स पर एक नज़र डालें (यह वीएस -2008 में बनाया गया है)। यह आपको "टेम्पलेट" कक्षाएं बनाने की अनुमति देता है जो आपके लिए कोड उत्पन्न करते हैं। Oleg Sych इसके लिए एक अमूल्य संसाधन है।

Link for Oleg's tutorial on code generation

+0

यह कैसे बिल्ड मुद्दों को हल करता है? मुझे यकीन नहीं है कि ब्लू का मतलब क्या है, लेकिन मैं अपने निर्माण में ऑटो-जेनरेट कोड शामिल करना चाहता हूं ... कुछ आईडीएल फ़ाइल है जो सी # कक्षाएं उत्पन्न करती है। अब, अगर किसी अन्य टीम के सदस्य ने आईडीएल बदल दिया है, तो मैं चाहता हूं कि मेरी सी # कक्षा का पुनर्निर्माण किया जाए। टेम्पलेट पता क्या है? – ripper234

+0

टी 4 टेम्पलेट्स को प्रत्येक बिल्ड पर कक्षाएं उत्पन्न करने के लिए कॉन्फ़िगर किया जा सकता है। यह समय लेने वाला नहीं है, और यह एक अच्छा अभ्यास है। –

+0

@ माइकल: फ़ाइलों को अनावश्यक रूप से पुन: उत्पन्न नहीं किया जाना चाहिए, क्योंकि यह निर्माण को धीमा कर देता है। सब कुछ जो एक बिल्ड को धीमा कर देता है, ऊपर उठता है और महसूस करता है। मेरा मानना ​​है कि जब मैं कहता हूं कि निर्माण में अच्छी तरह से स्थापित होने के बाद इसे ठीक करना है तो इसे रोकने के लिए यह समस्या आसान है। –

0

मुझे टी 4 टेम्पलेट्स की उपस्थिति पता है (और कई लोगों को पता है), लेकिन मैंने उन्हें स्वयं नहीं उपयोग किया है। उन लोगों के अलावा, आपके पास दो मुख्य विकल्प हैं:

  1. प्रोजेक्ट के अंदर स्रोत को बदलने के लिए सिंगलफाइल जेनरेटर का उपयोग करें। जब भी आप संपादित दस्तावेज़ को सहेजते हैं, तो यह स्वचालित रूप से कोड फ़ाइल को पुन: उत्पन्न करेगा। यदि आप स्रोत नियंत्रण का उपयोग करते हैं, तो जेनरेट की गई फ़ाइल को परियोजना के हिस्से के रूप में चेक किया जाएगा। इसके साथ कुछ सीमाएं हैं:
    • आप केवल प्रत्येक इनपुट के लिए एक आउटपुट उत्पन्न कर सकते हैं।
    • चूंकि आप ऑर्डर को नियंत्रित नहीं कर सकते हैं जिसमें फाइलें उत्पन्न होती हैं, और फाइलें बिल्ड समय पर उत्पन्न नहीं होती हैं, इसलिए आपका आउटपुट केवल एक इनपुट फ़ाइल से ही प्रभावी रूप से प्राप्त किया जा सकता है।
    • डेवलपर की मशीन पर एक फ़ाइल जनरेटर स्थापित होना चाहिए यदि वे इनपुट फ़ाइल संपादित करने की योजना बनाते हैं। चूंकि जेनरेट कोड स्रोत नियंत्रण में है, अगर वे इनपुट संपादित नहीं करते हैं तो उन्हें आउटपुट को पुन: उत्पन्न करने की आवश्यकता नहीं होगी।
    • चूंकि आउटपुट केवल तब उत्पन्न होता है जब इनपुट सहेजा जाता है, आउटपुट इनपुट फ़ाइल (यहां तक ​​कि सिस्टम घड़ी) की सटीक सामग्री के अलावा किसी भी राज्य पर निर्भर नहीं होना चाहिए।
  2. निर्माण के हिस्से के रूप में कोड उत्पन्न करें। इसके लिए, आप एक एमएसबिल्ड लक्ष्य फ़ाइल लिखते हैं। इसके लिए, आपके पास इनपुट (ओं) और आउटपुट का पूर्ण नियंत्रण है इसलिए निर्भरताओं को संभाला जा सकता है। सिस्टम स्थिति को आवश्यक होने पर इनपुट निर्भरता के रूप में माना जा सकता है, लेकिन याद रखें कि कोड निर्माण की आवश्यकता वाले प्रत्येक निर्माण को एक निर्माण से अधिक समय लगता है जो पूर्ववत उत्पन्न परिणाम का उपयोग करता है।परिणाम (जेनरेट की गई स्रोत फाइलें) आमतौर पर obj निर्देशिका में रखी जाती हैं और csc (सी # कंपाइलर) पर जाने वाले इनपुट की सूची में जोड़ दी जाती हैं। इस विधि की सीमाएं:
    • सिंगलफाइल जेनरेटर की तुलना में लक्ष्य फ़ाइल लिखना अधिक कठिन है।
    • बिल्ड आउटपुट उत्पन्न करने पर निर्भर करता है, भले ही उपयोगकर्ता इनपुट संपादित कर रहा हो।
    • चूंकि जेनरेट कोड प्रोजेक्ट का हिस्सा नहीं है, इसलिए ब्रेकपॉइंट्स सेट करने जैसी चीज़ों के लिए जेनरेट कोड को देखना मुश्किल है।
संबंधित मुद्दे