2009-08-18 6 views
15

J'ai un projet VS qui contient: 1. Une action de pré-construction de l'exécution de TextTransform sur un "template.tt" pour générer "generated.cs" 2. "généré. cs "listé comme l'un des fichiers à compiler (ie dans la liste des fichiers du projetOrdre de transformation et de génération T4 dans Visual Studio

Lorsque je compile le projet, l'action de préconstruire est terminée," generated.cs "est recréé mais VS compile le précédent Version de celle-ci (que je suppose qu'elle est chargée en mémoire au début du processus de construction)

Que peut-on faire pour que la compilation utilise le fichier cs nouvellement généré (qui est généré dans l'action de pré-construction?

(notez que dans ma situation l'entrée de transformation de texte est dynamique ne peut pas être donc fait dans le temps de conception)

Merci.

Répondre

4

Je ne pense pas que vous ayez besoin d'une action de pré-construction personnalisée. Ajoutez simplement le fichier ".tt" à votre projet et définissez sa propriété "Custom Tool" sur "TextTemplatingFileGenerator". Vous pouvez vous assurer que les fichiers * .generated.cs sont également ajoutés au projet, mais je pense que VS prend soin de cela.

+6

Cela ne semble pas fonctionner pour moi. Je pense que Zvika disait qu'ils voulaient que le gabarit T4 fonctionne de façon magique chaque fois que son projet est construit. C'est ce que je veux aussi. Cependant, j'utilise T4MVC avec ASP.NET MVC 3. Par exemple, si je prends un projet qui construit, ajouter un nouveau fichier qui devrait être récupéré par T4MVC, puis reconstruire le projet, je ne vois pas le changement qui aurait dû être fait par T4MVC. Je dois explicitement déclencher une mise à jour en cliquant avec le bouton droit sur le fichier .tt et en choisissant Exécuter l'outil personnalisé. –

+0

cela générera uniquement la sortie lorsque vous enregistrez le fichier '.tt'. –

3

Il existe maintenant une solution à ce problème! Oleg Sych a posté sur son blog un article détaillant comment faire du travail de transformation au moment de la construction.

est ici la source: https://web.archive.org/web/20140116193428/http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration/

Fondamentalement, vous venez de comprendre les objectifs de construction T4 dans votre dossier de projet et définissez la propriété TransformOnBuild true.

est ici l'extrait pertinent:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <PropertyGroup> 
    <TransformOnBuild>true</TransformOnBuild> 
    </PropertyGroup> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" /> 

Notez que le fichier Microsoft.TextTemplating.targets doit être inclus avec les Microsoft.CSharp.targets.

+0

Cela génère les fichiers mais omet leur espace de noms relatif. comment puis-je surmonter cela? –

Questions connexes