2013-06-15 11 views
5

पर एक स्थिर वर्ग में एक कॉन्स का संदर्भ देता है मेरे पास एक टी 4 सी # फ़ाइल है जिसमें मुझे स्थिर वर्ग में निरंतर संदर्भित करने की आवश्यकता है। स्थैतिक वर्ग एक ही नामस्थान में है।टी 4 संकलन समय

क्या यह संभव है?

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

.cs फ़ाइल:

namespace me 
{ 
    pubic static class Stat 
    { 
    public const int Const = 1; 
    } 
} 

। टीटी फ़ाइल:

... 
namespace me 
{ 
    pubic static int Test 
    { 
    return <#= Stat.Const #>; 
    } 
} 
+0

यह एक अच्छा सवाल है। यह एक आम मुद्दा है और उत्तर स्पष्ट नहीं है। सोचो कि मैं इसके बारे में एक ब्लॉग पोस्ट लिख सकता हूं;)। –

+0

जब आप पूरा कर लें तो कृपया अपनी पोस्ट से लिंक करें ताकि मैं जवाब को विस्तार से देख सकूं। – IamIC

+1

कुछ अन्य विचार। पीढ़ी की प्रक्रिया के हिस्से के रूप में टीटी फाइल और उत्पादन द्वारा कॉन्स "स्वामित्व" हो सकता है। या रस्सी युक्त फ़ाइल को पार्स करने के लिए roslyn कोशिश करें और इसे वाक्यविन्यास पेड़ से निकालें। – FuleSnabel

उत्तर

3

यह वास्तव में संभव है। हालांकि आप पहली बार एक जोड़े को काम करने होंगे:

  1. अपने वर्ग और स्थिरांक सुनिश्चित दोनों सार्वजनिक (जो वे कर रहे हैं) कर रहे हैं।
  2. एक डीएल उत्पन्न करने के लिए अपना समाधान बनाएं (जिसमें स्थैतिक वर्ग और कॉन्स्ट आप संदर्भित करना चाहते हैं)।
  3. संदर्भ के साथ <#@ assembly name="$(TargetPath)" #>
  4. संदर्भ नाम स्थान है, जिसमें अपने स्थिर वर्ग <#@ import namespace="ns" #>
  5. साथ रहता है, आपके .tt उत्पन्न अपने .tt में मौजूदा विधानसभा।
  6. असेंबली में नव-जेनरेट कोड शामिल करने के लिए अपने समाधान को पुनर्निर्माण करें।

ऐसा करना चाहिए। मुश्किल बिट यह महसूस करने में है कि आपका .tt आपकी प्रोजेक्ट में किसी भी पुराने क्लास फ़ाइल की तरह काम नहीं करता है। चूंकि इसे उत्पन्न किया जाता है, इसे उत्पन्न करने के लिए कुछ चाहिए, जो इस मामले में आपका प्रोजेक्ट डीएल है जिसे आपको पहले से उत्पन्न करना होगा।


और वादा किया था के रूप में, here is the blog post I wrote about this question :)

+0

क्या इसका मतलब है कि निरंतर एक अलग असेंबली में होना चाहिए ताकि इसे संदर्भित किया जा सके? – IamIC

+0

नहीं, लेकिन आपको .t से उत्पन्न कोड को शामिल करने के लिए दूसरी बार अपने .dll को पुन: उत्पन्न करना होगा। यदि आपकी जेनरेट की गई कोड फ़ाइल में त्रुटियां पैदा हुई हैं तो आपको पुन: उत्पन्न करने से पहले इसकी सामग्री को मिटाना होगा। –

+0

यह काम कर रहा है, धन्यवाद! – IamIC