2010-04-17 10 views
11

'u this answer tabanlı F # kodu oluşturmak için kullanmaya çalışan bir T4 kullanıcısıyım, ancak sınıf özellik bloklarının deyim bloklarıyla karıştırılamayacağı anlaşılıyor. Bunu başarmak için şablonu yeniden nasıl ...T4 Toolbox - sınıf özelliği ve deyim bloklarını karıştırma

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.

Yani: İşte benim kod:

<#@ 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(); 
    } 
} 

#> 

Ve bu hatayı alıyorum?

cevap

11

Birinci sınıf özellik bloğundan sonra, sonraki tüm ifade bloklarını sınıf özellik blokları da oluşturmalısınız.

Kapakların altında, birinci sınıf özellik bloğu "Generate" yönteminin arkasını sona erdirir ve içeriği şablon sınıfının arkasındaki şablonun üyeleri olarak eklemek için geçer.

Visual Studio 2010 kullanıyorsanız, her zaman önceden oluşturulmuş bir şablon oluşturabilir ve başlık altında neler olup bittiğini görmek için normal şablon kodunuzu yapıştırabilirsiniz.

5

Tüm sınıf özelliklerinin aynı özellik bloğunda, herhangi bir çıktının altında olması gerekir.

+0

Ben tüm gördüğüm –

+0

hiç çıktı almak bunu yaparsak. Diğer sorudaki cevabın nasıl çalışmayı amaçladığını anlamıyorum ama bunun T4 için bir kural olduğunu söyleyebilirim. Diğer projede oluşturulan dosyaya bir bağlantı eklemenizi tavsiye ederim. – erikkallen

0

@ GarethJ'in cevabı bunun neden olduğunu açıklarken, size tedaviyi anlatmaz. Sen yani "< # +" yerine kullanmak, artı işareti eklemeniz gerekir sadece "< #"

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