Error T4 en VS. Compilación de la transformación: 'Escribir' no es miembro
-
03-07-2019 - |
Pregunta
Estoy tratando de usar una clase dentro de una plantilla T4 en VS2008.
Aquí hay una versión simplificada de lo que estoy haciendo ...
<#@ 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
#>
Cuando ejecuto esta plantilla ... aparece el siguiente error ...
Error 1 Compilando la transformación: 'Escribir' no es miembro de 'Microsoft.VisualStudio.TextTemplatingF77BDE667ECAD297F587D3D651053846. GeneratedTextTransformation.SomeClass '. D: \ Development \ PrivateProjects \ CodeGeneration \ CodeGeneration \ Generation \ Common \ test2.tt 16 1 CodeGeneration
¿Alguien puede decirme por qué esto causa el error que hace y, lo que es más importante, cómo negar sus efectos?
Solución
El código ...
#>test<#+
... se traduce internamente a ...
Write("test");
Como mi clase no tiene un método de "Escritura", la compilación falla.
La solución es ....
<#@ 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
#>
Lo que hace que la escritura se pase a la clase principal para su procesamiento.