Я пытаюсь использовать класс в шаблоне 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
#>
Когда я запускаю этот шаблон ... я получаю следующую ошибку ...
Error 1 Compiling transformation: 'Write' is not a member of 'Microsoft.VisualStudio.TextTemplatingF77BDE667ECAD297F587D3D651053846. GeneratedTextTransformation.SomeClass'. D:\Development\PrivateProjects\CodeGeneration\CodeGeneration\Generation\Common\test2.tt 16 1 CodeGeneration
Может ли кто-нибудь сказать мне, почему это вызывает ошибку, и, что более важно, как свести на нет ее последствия?





Код...
#>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
#>
В результате запись передается в родительский класс для обработки.