1

VS2008 の T4 テンプレート内でクラスを使用しようとしています。

これが私がやっていることの簡略化されたバージョンです...

<#@ template language="VB" debug="True" hostspecific="True" #>
<#@ output extension=".vb" debug="True" hostspecific="True" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Windows.Forms.dll" #>
<#@ assembly name="System.xml" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SQLClient" #>
<# Call (New SomeClass).Start()#>
<#+
Private Class SomeClass
    Public Sub Start()
    #>test<#+
    End Sub
End Class 
#>

このテンプレートを実行すると...次のエラーが表示されます...


エラー 1 変換のコンパイル: '書き込み' は 'Microsoft.VisualStudio.TextTemplatingF77BDE667ECAD297F587D3D651053846 のメンバーではありません。GeneratedTextTransformation.SomeClass'. D:\Development\PrivateProjects\CodeGeneration\CodeGeneration\Generation\Common\test2.tt 16 1 CodeGeneration

なぜこれがエラーを引き起こすのか、さらに重要なことに、その影響を無効にする方法を教えてもらえますか?

4

1 に答える 1

2

コード...

#>test<#+

...内部的には...に変換されます

Write("test"); 

私のクラスには「書き込み」メソッドがないため、コンパイルは失敗します。

回避策は....

<#@ template language="VB" debug="True" hostspecific="True" #>
<#@ output extension=".vb" debug="True" hostspecific="True" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Windows.Forms.dll" #>
<#@ assembly name="System.xml" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SQLClient" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>

<# Call (New SomeClass(Me)).Start()#>

<#+
Private Class SomeClass
Private mOutput as TextTransformation
Public Sub New(Output as TextTransformation)
    mOutput = Output
End Sub 
Public Sub Write(SomeText as String)
    mOutput.Write(SomeText)
End Sub 
    Public Sub Start()
        #>test<#+
    End Sub
End Class 
#>

その結果、書き込みが処理のために親クラスに渡されます。

于 2008-10-17T14:48:13.600 に答える