2011-09-21 9 views
5

के भीतर किया जा सकता है मेरे पास एक टी 4 टेम्पलेट है जिसका उपयोग टेक्स्ट टेम्प्लेटिंगफाइलप्रप्रोसेसर के साथ किया जाता है ताकि वह कक्षा उत्पन्न कर सके जिसे मैं टेम्पलेट के आउटपुट को उत्पन्न करने के लिए उपयोग कर सकता हूं।सशर्त संकलन प्रतीकों का उपयोग टी 4 टेम्पलेट्स

टी 4 टेम्पलेट की शुरुआत में मैं कई नामस्थान आयात करता हूं। जैसे

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 
//... 

मैं Preprocessor Directives उपयोग करने के लिए नेमस्पेस (जो एक ही इंटरफेस प्रदान करते हैं लेकिन ProductX कार्यक्षमता भिन्न) का एक और सेट के साथ इन आयात बाहर स्विच करना चाहते हैं। जैसे

<# 
#if(ProductX) 
{ 
#> 
    <#@ import namespace="Company.ProductX.Widgets" #> 
    <#@ import namespace="Company.ProductX.Services" #> 
    //... 
<# 
} 
#endif 
#> 
<# 
#if(ProductY) 
{ 
#> 
    <#@ import namespace="Company.ProductY.Widgets" #> 
    <#@ import namespace="Company.ProductY.Services" #> 
    //... 
<# 
} 
#endif 
#> 
ऊपर के उदाहरण के साथ

आयात पूर्वप्रक्रमक निर्देश की परवाह किए बिना कक्षा में बयान का उपयोग कर इसी बनाने के लिए लग रहे हैं। जैसे

using Company.ProductX.Widgets 
using Company.ProductX.Services 
using Company.ProductY.Widgets 
using Company.ProductY.Services 

वहाँ एक और तरीका है टी -4 टेम्पलेट्स में preprocessors उपयोग करने के लिए स्वयं टेम्पलेट के बजाय टेम्पलेट उत्पादन प्रभावित होने की है?

उत्तर

5

आपके उदाहरण में प्रीप्रोसेसर निर्देश उत्पन्न आउटपुट में इंजेक्शन दिया जाता है। आप संभावित रूप से क्या कर सकते हैं एक productX.tt फ़ाइल है जो सही नामस्थान आयात करती है और टेम्पलेट कोड को शामिल करने के लिए ## @ शामिल है # शामिल है।

कुछ इस तरह (ProductX.tt):

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

(ProductY.tt):

<#@ import namespace="Company.ProductY.Widgets" #> 
<#@ import namespace="Company.ProductY.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

मैं अगर यह आपकी मदद करता है यकीन नहीं है, लेकिन ईमानदार मैं एक छोटे से संघर्ष कर रहा हूँ होने के लिए यहां उपयोग-मामले के साथ थोड़ा सा।

+0

हम ऐसा करने के लिए ऐसे 'हेडर' टेम्पलेट्स का उपयोग करते हैं और पाते हैं कि यह काफी अच्छी तरह से काम करता है। उत्पाद में बनाए गए निर्देशों के आस-पास सशर्तों को सम्मिलित करने का कोई तरीका नहीं है। – GarethJ

+0

उत्तर के लिए धन्यवाद। यह चारों ओर एक अच्छा काम की तरह लगता है। एक बार जब मैं इसे काम कर लेता हूं तो मैं इसे समाधान के रूप में चिह्नित करूंगा। –

0

पुराने प्रश्न के लिए नया विचार।

टी 4 आउटपुट में मनमाने ढंग से कोड से गुज़रने के लिए Custom T4 Text Template Directive Processor का उपयोग करना संभव हो सकता है।

कस्टम निर्देश प्रोसेसर को प्रत्येक मशीन पर इसका उपयोग करने के लिए पंजीकृत होना आवश्यक होगा।

+1

आप एक कस्टम निर्देशक प्रोसेसर लिख सकते हैं जो अनिवार्य रूप से एक कस्टम शामिल था निर्देश, हाँ। हालांकि हेडर टेम्पलेट दृष्टिकोण की तुलना में यह बहुत काम है। – GarethJ

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