Ошибка Т4 на VS. Компиляция преобразования: «Write» не является членом - PullRequest
1 голос
/ 17 октября 2008

Я пытаюсь использовать класс в шаблоне T4 в VS2008.

Вот упрощенная версия того, что я делаю ...

<#@ 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 Компиляция преобразования: «Write» не является членом «Microsoft.VisualStudio.TextTemplatingF77BDE667ECAD297F587D3D651053846. GeneratedTextTransformation.SomeClass. D: \ Development \ PrivateProjects \ CodeGeneration \ CodeGeneration \ Generation \ Common \ test2.tt 16 1 CodeGeneration

Может кто-нибудь сказать мне, почему это вызывает ошибку и, что более важно, как отрицать ее эффекты?

1 Ответ

2 голосов
/ 17 октября 2008

код ...

#>test<#+

... внутренне переводится как ...

Write("test"); 

Поскольку в моем классе нет метода 'Write', компиляция не удалась.

Обходной путь ...

<#@ 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 
#>

В результате запись передается в родительский класс для обработки.

...