2009-05-24 6 views
1

Je suis en train (et à défaut) d'écrire un simple fichier modèle:Erreur lors d'une tentative de passer un paramètre à un modèle t4

<#@ template language="C#" hostspecific="True" debug="True" #> 
<#@ output extension="cs" #> 
<#@ include file="T4Toolbox.tt" #> 
<#@ property name="ClassName" processor="PropertyProcessor" type="System.String" #> 

public class <#= ClassName #> 
{ 
} 

Lorsque je clique sur le modèle en studio visuel, la propriété « ClassName 'est là dans la fenêtre des propriétés. C'est ce que je veux! Quand j'entrer du texte là-bas et construire, je reçois l'erreur suivante:

Error 1 Running transformation: System.ArgumentNullException: Value cannot be null. 
Parameter name: objectToConvert 
    at Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture(Object objectToConvert) 
    at Microsoft.VisualStudio.TextTemplating32ED7F6BD49D2C3984C2CB7194792D4B.GeneratedTextTransformation.TransformText() in c:\Users\neilt.PAV12\Documents\Visual Studio 2008\Projects\ConsoleApplication2\ConsoleApplication2\ClassMaker.tt:line 6 C:\Users\neilt.PAV12\Documents\Visual Studio 2008\Projects\ConsoleApplication2\ConsoleApplication2\ClassMaker.tt 1 1 

Si tout va bien, vous pouvez voir ce que je veux faire: Je voudrais que mon modèle pour cracher un fichier .cs avec une classe nommée avec la chaîne que j'ai définie dans la fenêtre de propriétés dans Visual Studio. Malheureusement, je manque à un très tôt étape !!

Répondre

0

Last time I tried, ce scénario ne fonctionne pas parce qu'il n'y a pas de traitement standard pour la directive de la propriété et aucun soutien dans Visual Studio. Vous utilisez peut-être le support limité fourni pour cette directive par l'éditeur Clarius T4; Je me souviens avoir eu une erreur similaire.

+0

Donc, il n'y a aucun moyen de faire cela? J'espérais pouvoir utiliser les outils de temps de conception de Visual Studio, tels que celui qui vous permet de sélectionner une connexion de base de données, pour ensuite passer dans la base de données que mon générateur de template a besoin de créer une DAL pour moi. Le simple paramétrage du nom de la base de données dans mon modèle est-il la seule façon de le faire? –

2

Vous invoquez Initialize() mehod qui devraient d'abord, comme ceci:

ClassTemplate t = new ClassTemplate(); 
t.Session = new Dictionary<string, object>(); 
t.Session["ClassName"] = "Person"; 

t.Initialize();//This is important. 

string output = t.TransformText(); 
Console.WriteLine(output); 
Questions connexes