2010-04-17 20 views
11

मैं this answer पर आधारित F # कोड उत्पन्न करने के लिए T4 Toolbox का उपयोग करने की कोशिश कर रहा एक टी 4 नौसिखिया हूं, लेकिन ऐसा लगता है कि क्लास फीचर ब्लॉक को कथन ब्लॉक के साथ मिश्रित नहीं किया जा सकता है। कैसे मैं इस लक्ष्य को हासिल करने के लिए टेम्पलेट को फिर से लिखने कर सकते हैंटी 4 टूलबॉक्स - मिश्रण वर्ग सुविधा और कथन ब्लॉक

A Statement cannot appear after the first class feature in the template. Only boilerplate, expressions and other class features are allowed after the first class feature block.

तो ...: यहाँ मेरी कोड है:

<#@ template language="C#" hostspecific="True" debug="True" #> 
<#@ output extension="txt" #> 
<#@ include file="T4Toolbox.tt" #> 
<# 
    FSharpTemplate template = new FSharpTemplate(); 
    template.Output.Project = @"..\Library1\Library1.fsproj"; 
    template.Output.File = "Module2.fs"; 
    template.Render(); 
#> 
<#+ 
class FSharpTemplate: Template 
{ 
    public override string TransformText() 
    { 
#> 

module Module2 

<# for (int i = 0; i < 10; i++) { #> 
<#= i #> 
<# } #> 

<#+ 
     return this.GenerationEnvironment.ToString(); 
    } 
} 

#> 

और मैं इस त्रुटि मिलती है?

उत्तर

11

प्रथम श्रेणी सुविधा ब्लॉक के बाद, आपको सभी बाद के कथन ब्लॉक को क्लास फीचर ब्लॉक भी बनाना होगा।

कवर के तहत, प्रथम श्रेणी की सुविधा ब्लॉक पर्दे के पीछे "उत्पन्न" विधि समाप्त हो जाता है और टेम्पलेट के दृश्यों वर्ग के पीछे के सदस्यों के रूप में सामग्री डालने में चला जाएगा।

यदि आप विजुअल स्टूडियो 2010 का उपयोग कर रहे हैं, तो आप हमेशा प्रीप्रोसेस्ड टेम्पलेट बना सकते हैं और हुड के नीचे क्या चल रहा है यह देखने के लिए अपना नियमित टेम्पलेट कोड पेस्ट कर सकते हैं।

5

आपके पास किसी भी आउटपुट के नीचे, उसी सुविधा ब्लॉक में सभी क्लास सुविधाएं होनी चाहिए।

+0

तो मुझे लगता है कि मैं सभी –

+0

मैं देख रहा हूँ में कोई उत्पादन मिलता है। मैं वास्तव में समझ नहीं पा रहा हूं कि दूसरे प्रश्न में उत्तर कैसे काम करना था, लेकिन मैं आपको बता सकता हूं कि यह टी 4 के लिए एक नियम है। मैं अन्य प्रोजेक्ट में जेनरेट की गई फ़ाइल में एक लिंक जोड़ने की सलाह दूंगा। – erikkallen

0

जबकि @ गैरेथजे का जवाब बताता है कि ऐसा क्यों होता है, यह आपको इलाज नहीं बताता है। आप के लिए धन चिह्न जोड़ने की जरूरत है, यानि कि का उपयोग करें "< # +" के बजाय सिर्फ "< #"

<#+ for (int i = 0; i < 10; i++) { #> 
<#= i #> 
<#+ } #> 
संबंधित मुद्दे