Errore T4 su VS. Trasformazione di compilazione: 'Scrivi' non è un membro
-
03-07-2019 - |
Domanda
Sto cercando di usare una classe all'interno di un modello T4 in VS2008.
Ecco una versione semplificata di ciò che sto facendo ...
<#@ 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
#>
Quando eseguo questo modello ... ottengo il seguente errore ...
Errore 1 Trasformazione compilazione: 'Scrivi' non è un membro di 'Microsoft.VisualStudio.TextTemplatingF77BDE667ECAD297F587D3D651053846. GeneratedTextTransformation.SomeClass'. D: \ Development \ PrivateProjects \ CodeGeneration \ CodeGeneration \ Generation \ Common \ test2.tt 16 1 CodeGeneration
Qualcuno può dirmi perché questo causa l'errore che fa e, soprattutto, come negare i suoi effetti?
Soluzione
Il codice ...
#>test<#+
... si traduce internamente in ...
Write("test");
Dato che la mia classe non ha un metodo 'Write', la compilazione fallisce.
La soluzione alternativa è ....
<#@ 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
#>
Quale risulta che la scrittura viene passata alla classe genitore per l'elaborazione.