स्वचालित रूप से कोड जनरेट करने के लिए Visual Studio और पाठ टेम्पलेट ट्रांस्फ़ॉर्मेशन टूलकिट (T4) का उपयोग करें

पेज अद्यतन :
पेज निर्माण की तारीख :

परिचालन का वातावरण

विजुअल स्टूडियो
  • विजुअल स्टूडियो 2022
।जाल
  • .नेट 8.0
विंडोज़
  • विंडोज 11

आवश्यकताएँ

विजुअल स्टूडियो
  • यह कुछ पुराने संस्करण के साथ भी काम करता है
।जाल
  • यह कुछ पुराने संस्करण के साथ भी काम करता है

पहले

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

चूंकि टी 4 एक स्क्रिप्टिंग प्रारूप है, इसलिए टी 4 फ़ाइल बनाने के तुरंत बाद विजुअल स्टूडियो में कोड उत्पन्न करना बहुत आसान है। यह लिखा गया है कि यह स्वचालित रूप से कोड उत्पन्न करता है, लेकिन जो उत्पन्न होता है वह सिर्फ पाठ है, इसलिए प्रोग्राम के अलावा XML और JSON जैसे पाठ प्रारूप में कुछ भी उत्पन्न करना संभव है।

इस टिप का मुख्य उद्देश्य वास्तव में टी 4 में स्वचालित रूप से कोड उत्पन्न करने के चरणों की व्याख्या करना है, इसलिए मैं गहराई से टी 4 के विवरण में नहीं जाऊंगा। यदि आपने कभी सी # में एक प्रोग्राम लिखा है, तो आप इसे तुरंत समझ जाएंगे। यदि आप T4 के बारे में अधिक जानना चाहते हैं, तो कृपया आधिकारिक वेबसाइट और अन्य साइटों की जाँच करें।

पूर्व शर्त

यह टिप निम्नलिखित मानती है:

  • Visual Studio Windows पर स्थापित
  • सी # की समझ

T4 का उपयोग अधिकांश परियोजनाओं में किया जा सकता है, कुछ के अपवाद के साथ, इसलिए आप मूल रूप से स्थापना के दौरान अपना कार्यभार चुनने के लिए स्वतंत्र हैं।

एक प्रोजेक्ट बनाएं

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

T4 फ़ाइल बनाना (.tt)

कोई नया आइटम जोड़ने के लिए प्रोजेक्ट फ़ाइल या फ़ोल्डर पर राइट-क्लिक करें.

सभी टेम्पलेट देखें बटन क्लिक करें.

बाईं ओर के पेड़ से "सामान्य" चुनें, और बीच में सूची से "टेक्स्ट टेम्प्लेट" चुनें। फ़ाइल नाम मनमाना है।

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

फ़ाइल जोड़ने के बाद, आप देख सकते हैं कि समाधान Explorer में .tt फ़ाइल जोड़ी जा चुकी है.

फ़ाइल की सामग्री निम्नानुसार हैं।

यदि आप समाधान एक्सप्लोरर में .tt फ़ाइल निकालते हैं, तो आपको समान नाम की एक पाठ फ़ाइल दिखाई देगी। यह ऑटो-जेनरेट की गई फाइल होगी। चूंकि हमने अभी तक कुछ भी नहीं लिखा है, इसलिए फ़ाइल की सामग्री खाली है।

ऑटो-जेनरेट की गई फ़ाइल को .cs फ़ाइल बनाना

यदि आप T4 का उपयोग कर रहे हैं, तो आप डिफ़ॉल्ट .txt के बजाय .cs एक्सटेंशन का उपयोग करना चाहेंगे, क्योंकि आपके प्रोग्राम के लिए कोड स्वचालित रूप से उत्पन्न हो जाएगा। उस स्थिति में, .tt फ़ाइल खोलें और output extension .cs इसे .

ऑटो-जेनरेट की गई फ़ाइल में अब .cs एक्सटेंशन होना चाहिए। फ़ाइल का नाम स्वयं .tt फ़ाइल के समान है, इसलिए यदि आप इसे बदलना चाहते हैं, तो .tt फ़ाइल का नाम बदलें।

कुछ समय के लिए, कुछ लिखें और इसे स्वचालित रूप से उत्पन्न फ़ाइल में आउटपुट करें

T4 में, आप जो लिखते हैं उसकी सामग्री मूल रूप से आउटपुट होती है जैसे वे हैं। <# ... #> टी 4 प्रक्रिया है, और बाकी वास्तविक आउटपुट टेक्स्ट है।

उदाहरण के लिए, चलिए इसे .tt फ़ाइल में निम्नानुसार रखते हैं।

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>

public static class Sample
{
  public static void Hello()
  {
    Console.WriteLine("Hello T4!!");
  }
}

जब आप इसे सहेजते हैं, तो ऑटो-जेनरेट की गई फ़ाइल को ठीक उसी तरह आउटपुट करना चाहिए जैसा आपने इसे लिखा था।

आउटपुट कोड है, इसलिए निश्चित रूप से इसे Program.cs से भी बुलाया जा सकता है।

स्वचालित रूप से कोड जनरेट करने का प्रयास करें

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

इस बार, एक उदाहरण के रूप में, आइए एक विधि बनाएं जो प्रत्येक प्रकार की पार्स विधि को स्ट्रिंग में जोड़ती है और निर्दिष्ट डिफ़ॉल्ट मान लौटाती ParseXXXX है यदि इसे परिवर्तित नहीं किया जा सकता है। यह सृष्टि का सिर्फ एक उदाहरण है, इसलिए कृपया इसे जोड़ें यदि आपको लगता है कि कोई ऐसा हिस्सा है जिसकी कमी है।

यदि आप विवरण की व्याख्या किए बिना सी # को समझ सकते हैं, तो इसे देखना तेज़ होगा, इसलिए मैं पहले पूर्ण कोड पोस्ट करूंगा।

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>

<#
  List<string> types = new(){"Int", "Short", "Long", "Float", "Double", "Decimal"}; 
#>

public static class ParseExtensions
{
<# foreach (var type in types) { #>
<#   var typeLower = type.ToLower(); #>
  public static <#= typeLower #> Parse<#= type #>(this string self, <#= typeLower #> defaultValue)
  {
    return <#= typeLower #>.TryParse(self, out var val) ? val : defaultValue;
  }
<# } #>
}

हम जो कर रहे हैं वह पहली बार बनाए जाने वाले प्रकारों List को परिभाषित कर रहा है , और फिर उन्हें foreach उस संख्या में विधियों को उत्पन्न करने के लिए चारों ओर घुमा रहा है। टी 4 का स्क्रिप्ट हिस्सा सी # में लिखा गया है, इसलिए यदि आप सी # समझते हैं, तो आपको इसे समझने में सक्षम होना चाहिए।

जब आप ऐसा करते हैं, निम्न कोड उत्पन्न होता है:

public static class ParseExtensions
{
  public static int ParseInt(this string self, int defaultValue)
  {
    return int.TryParse(self, out var val) ? val : defaultValue;
  }
  public static short ParseShort(this string self, short defaultValue)
  {
    return short.TryParse(self, out var val) ? val : defaultValue;
  }
  public static long ParseLong(this string self, long defaultValue)
  {
    return long.TryParse(self, out var val) ? val : defaultValue;
  }
  public static float ParseFloat(this string self, float defaultValue)
  {
    return float.TryParse(self, out var val) ? val : defaultValue;
  }
  public static double ParseDouble(this string self, double defaultValue)
  {
    return double.TryParse(self, out var val) ? val : defaultValue;
  }
  public static decimal ParseDecimal(this string self, decimal defaultValue)
  {
    return decimal.TryParse(self, out var val) ? val : defaultValue;
  }
}

जो उत्पन्न होता है वह कोड है, इसलिए आप इसे अपने प्रोग्राम में उपयोग कर सकते हैं।

T4 के बारे में थोड़ा और

भले ही टी 4 स्क्रिप्ट भाग सी # में लिखा जा सकता है, टी 4 सी # कोड को सी # कोड से अलग करना आवश्यक है जो वास्तव में उत्पन्न होता है। वह हिस्सा जो भेद करता है वह है <# .... #><# .... #> वह कोड है जिसे स्क्रिप्ट के रूप में निष्पादित किया जाता है, न कि वह कोड जो वास्तव में टी 4 के स्क्रिप्ट भाग में आउटपुट होता है।

<# .... #> सी # की सामग्री को स्वयं समझाया नहीं गया है क्योंकि वे वैसे ही हैं जैसे वे हैं, लेकिन <# .... #> कई प्रकार के फ्रेम हैं। प्रत्येक का उपयोग करने के निम्नलिखित तरीके हैं।

कोड स्पष्टीकरण
<#@ .... #> यह मुख्य रूप से विभिन्न शीर्षलेखों की घोषणा में उपयोग किया जाता है। इसका उपयोग T4 कोड की शुरुआत में और की import घोषणा में assembly किया जाता है।
<# .... #> कोड लिखें जो T4 द्वारा संसाधित किया जाता है। इसे कई लाइनों में विभाजित किया जा सकता है। इस श्रेणी में वर्णित कुछ भी केवल एक ऑपरेशन के रूप में कार्य करता है और आउटपुट टेक्स्ट को प्रभावित नहीं करता है।
<#= .... #> इसका उपयोग तब किया जाता है जब आप आउटपुट परिणाम के रूप में एक चर जैसे मान को आउटपुट करना चाहते हैं। string text = "Sample"; उदाहरण के लिए, यदि आप , नामक एक चर <#= text #> लिखते हैं, तो आउटपुट होगा Sample
<#+ .... #> कक्षाओं और विधियों को परिभाषित करने के लिए उपयोग किया जाता है। मूल रूप से, यह T4 फ़ाइल के अंत में लिखा गया है।

T4 संपादक के बारे में

यदि आपके पास विजुअल स्टूडियो में एक्सटेंशन नहीं है, तो .tt फ़ाइल खोलना बिना किसी रंग के काले और सफेद पाठ में प्रदर्शित होगा, जिसे देखना मुश्किल है।

उनमें से कुछ आसानी से पढ़ी जाने वाली .tt फ़ाइलों के लिए एक्सटेंशन प्रदर्शित कर सकते हैं, इसलिए कृपया अपनी पसंद का एक एक्सटेंशन ढूंढें। चूंकि यह स्वयंसेवकों द्वारा बनाया गया है, इसलिए सामग्री वर्ष के समय और विजुअल स्टूडियो के संस्करण के आधार पर बदल सकती है। एक्सटेंशन के अंतर्गत Visual Studio मेनू से एक्सटेंशन जोड़ा जा सकता है।

यहाँ मैंने विजुअल स्टूडियो 2022 में "T4 भाषा" नामक एक्सटेंशन के साथ क्या देखा।