2013-08-21 7 views
3

J'ai utilisé T4 pour générer des classes d'entités, mais j'ai oublié de les créer Serializable. Donc, y at-il une solution pour utiliser quelque chose comme T4 pour ajouter un attribut Serializable à toutes mes classes?Modifier les classes modifiées générées par T4

+0

Pas une réponse mais une astuce pour le futur: La puissance de T4 ne se manifeste que lorsque vous régénérez constamment les classes. IE vous ne modifiez pas le code généré. Alors ce serait très simple. Changez juste le modèle et régénérez. Si vous avez besoin d'étendre les classes générées, utilisez des classes/méthodes partielles. Si vous générez juste une fois que T4 dégénère en programmation copier-coller avec le support d'outil. – FuleSnabel

Répondre

1

Si vous avez déjà modifié vos classes générées, je pense que vous pourriez trouver plus facile de faire avec le remplacement global de Visual Studio avec une regex de fantaisie pour trouver les classes que vous devez changer. (Si ce n'est pas possible, il n'est pas difficile d'écrire une application console rapide pour traiter les fichiers).

En utilisant T4, vous pouvez contrôle les fichiers sont effacés et remplacés, par exemple en utilisant la Output.PreserveExistingFile qui vient avec T4 Toolbox.

<# 
    var t = new SampleTemplate(); 
    t.Output.File = "Sample.cs"; 
    t.Output.PreserveExistingFile = true; 
    t.Render(); 
#> 

Puis vous pouvez supprimer les fichiers spécifiques que vous souhaitez recréer. Mais quelle que soit la manière dont vous déterminez les fichiers à remplacer, les modifications apportées aux fichiers que vous avez effectués depuis la dernière régénération seront perdues. Une recommandation consiste à créer vos modèles en tant que classes partielles afin que vous puissiez mettre toutes les modifications manuelles dans un fichier séparé (mais cela ne vous aide pas vraiment si vous avez déjà modifié vos classes générées).

1

Ces classes générées sont-elles des classes partielles? Si c'est le cas, utilisez un autre modèle T4 afin de générer une définition de classe partielle décorée avec l'attribut Serializable.

Sinon, vous pouvez utiliser Visual Studio CodeModel afin d'identifier toutes les classes qui ont besoin de cette implémentation dans un autre modèle T4, puis laisser ce modèle T4 ajouter les fragments de code nécessaires. Si vous utilisez tangible's T4 Editor, il est fourni avec une galerie de modèles gratuite et, pour autant que je sache, il existe un modèle appelé "Ajouter NotifyPropertyChanged" qui fait à peu près ce que vous cherchez: découvrir des classes de code dans une solution et faire les implémenter une interface donnée. Vous pouvez facilement adapter celui-ci et obtenir votre fonctionnalité souhaitée.

Espérons que ça aide.

Questions connexes