Question

J'essaie d'utiliser une classe dans un modèle T4 dans VS2008.

Voici une version simplifiée de ce que je fais ...

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

Quand j'exécute ce modèle ... j'obtiens l'erreur suivante ...

  

Erreur 1 Transformation de compilation: 'Write' n'est pas membre de   'Microsoft.VisualStudio.TextTemplatingF77BDE667ECAD297F587D3D651053846.   GeneratedTextTransformation.SomeClass '. D: \ Development \ PrivateProjects \ CodeGeneration \ CodeGeneration \ Generation \ Common \ test2.tt 16 1 CodeGeneration

Quelqu'un peut-il me dire pourquoi cela cause l'erreur et surtout comment en annuler les effets?

Était-ce utile?

La solution

Le code ...

#>test<#+

... en interne se traduit par ...

Write("test"); 

Comme ma classe n'a pas de méthode "Write", la compilation échoue.

La solution de contournement est ....

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

Cela a pour résultat que l'écriture est transmise à la classe parente pour traitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top