Comment obtenir un modèle T4 pour générer sa sortie sur chaque build? Dans l'état actuel des choses, il ne le régénère que lorsque je modifie le modèle.
J'ai trouvé d'autres questions similaires à celle-ci:
Transformation T4 et ordre de construction dans Visual Studio (sans réponse)
Comment obtenir des fichiers T4 à construire dans Visual Studio? (les réponses ne sont pas assez détaillées [tout en étant encore très compliquées] et n'ont même pas de sens)
Il doit y avoir un moyen plus simple de le faire!
visual-studio
tfs
msbuild
t4
JoelFan
la source
la source
Réponses:
J'ai utilisé la réponse de JoelFan pour venir avec ça. Je l'aime mieux car vous n'avez pas à vous rappeler de modifier l'événement de pré-construction chaque fois que vous ajoutez un nouveau fichier .tt au projet.
%PATH%
transform_all ..\..
"transform_all.bat
la source
"%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\texttransform.exe"
) dans le fichier de commandes, plutôt que de l'ajouter à% PATH%%COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe
. Entourez-le de guillemets doubles.TextTransform.exe
sucer. Vous pouvez déjà cliquer avec le bouton droit sur «Exécuter l'outil personnalisé» dans Visual Studio, afin qu'il dispose déjà du chemin d'accès de l'outil. Pourquoi dois-je refaire le travail de le fournir lorsque je crée à partir d'un contexte Visual Studio?Je suis d'accord avec GarethJ - dans VS2010, il est beaucoup plus facile de régénérer les modèles tt sur chaque build. Le blog d'Oleg Sych décrit comment le faire. En bref:
</Project>
C'est tout. Ouvrez votre projet. Sur chaque build, tous les modèles * .tt seront retraités
la source
msbuild mySolution.sln /p:CustomAfterMicrosoftCommonTargets="C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets" /p:TransformOnBuild=true /p:TransformOutOfDateOnly=false
Il existe un excellent package NuGet qui fait exactement cela:
Les détails sur le package peuvent être trouvés ici
la source
content
actions de construction<#@ template language="C#" #>
J'ai utilisé la réponse de MarkGr et développé cette solution. Tout d'abord, créez un fichier de commandes appelé RunTemplate.bat dans un dossier d' outils distinct au-dessus du dossier de solution principal. Le fichier batch a juste la ligne:
Ce fichier de commandes prend 2 paramètres ... % 1 est le chemin d'accès au fichier .tt sans l'extension .tt. 2% est le chemin vers les DLL visées par l' Assemblée directives dans le modèle.
Ensuite, allez dans les propriétés du projet du projet contenant le modèle T4. Accédez aux événements de construction et ajoutez la ligne de commande d'événement de pré-construction suivante :
en remplaçant MyTemplate par le nom de fichier de votre fichier .tt (c'est-à-dire MyTemplate.tt) sans l'extension .tt. Cela aura pour résultat de développer le modèle pour produire MyTemplate.cs avant de générer le projet. Ensuite, la version réelle compilera MyTemplate.cs
la source
Récemment trouvé ce super plugin VS, Chirpy .
Non seulement il génère votre T4 sur une version, mais il permet une approche basée sur T4 pour la minification de javascript, CSS, et vous permet même d'utiliser la syntaxe LESS pour votre CSS!
la source
Le moyen le plus simple consiste probablement à installer une extension Visual Studio appelée AutoT4 .
Il exécute tous les modèles T4 lors de la construction de manière automatique.
la source
La pré-construction peut être réduite à une seule ligne:
Cela transforme tous les
.tt
fichiers du projet et les répertorie dans la sortie de construction.Si vous ne voulez pas la sortie de construction, vous devez contourner un "comportement intéressant" :
Bien sûr, vous pouvez extraire ceci dans un fichier batch auquel vous transmettez le chemin du répertoire du projet si vous le souhaitez.
NB Le chemin peut nécessiter quelques ajustements. Le chemin ci-dessus est l'endroit où VS 2008 l'a installé sur ma machine; mais vous constaterez peut-être que le numéro de version entre
TextTemplating
etTextTransform.exe
est différent.la source
System.Exception: T4MVC can only execute through the Visual Studio host
Vérifiez C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ TextTemplating, il y a un exe de transformation de ligne de commande. Vous pouvez également écrire une tâche MSBuild avec un hôte personnalisé et effectuer la transformation vous-même.
la source
En développant les réponses de Seth Reno et JoelFan , je suis venu avec ceci. Avec cette solution, vous n'avez pas besoin de vous rappeler de modifier l'événement de pré-génération chaque fois que vous ajoutez un nouveau fichier .tt au projet.
Procédure de mise en œuvre
transform_all.bat "$(ProjectDir)" $(ProjectExt)
pour chaque projet avec un .tt que vous souhaitez générertransform_all.bat
REMARQUES
La transformation de texte suppose que le code du modèle T4 est le même langage que votre type de projet. Si ce cas ne s'applique pas à vous, vous devrez alors remplacer l'
$(ProjectExt)
argument par l'extension des fichiers que vous souhaitez que le code génère..TT
les fichiers doivent être dans le répertoire du projet sinon ils ne seront pas compilés. Vous pouvez créer des fichiers TT en dehors du répertoire du projet en spécifiant un chemin différent comme premier argument ( c'est-à-dire remplacer"$(ProjectDir)"
par le chemin contenant les fichiers TT.)N'oubliez pas également de définir le chemin d'accès correct au
transform_all.bat
fichier de commandes.Par exemple, je l'ai placé dans mon répertoire de solution pour que l'événement de pré-construction soit le suivant
"$(SolutionDir)transform_all.bat" "$(ProjectDir)" $(ProjectExt)
la source
t4list.txt
fichier sur PasteBin pour que j'essaie de voir si votre erreur vient de là?for /f "delims=" %%d in (t4list.txt) do (
et que les restrictions d'entreprise vous empêchent de publier votret4list.txt
fichier, je crains que je ne puisse pas faire grand-chose pour vous aider. J'avais vraiment voulu aider à résoudre ce problème, mais il semble que ce sera impossible car je n'ai pas de données pour continuer. Bonne chance pour résoudre le problème et n'oubliez pas de publier votre solution lorsque vous réussissez.(this.Host as IServiceProvider).GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
? Malheureusement, j'obtiens une exception de référence nulle , lorsque je lance tt depuis l'extérieur de Visual Studio.Si vous utilisez Visual Studio 2010, vous pouvez utiliser le SDK Visual Studio Modeling and Visualization: http://code.msdn.microsoft.com/vsvmsdk
Cela contient des tâches msbuild pour exécuter des modèles T4 au moment de la construction.
Consultez le blog d'Oleg pour plus d'explications: http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration
la source
Hé, mon script peut également analyser l'extension de sortie
Créez simplement
transform_all.bat $(SolutionDir)
un événement de pré-construction et tous les fichiers * .tt de votre solution seront transformés automatiquement.la source
Dynamo.AutoTT fera ce dont vous avez besoin. Vous pouvez le configurer pour regarder les fichiers via une regex ou générer sur build. Il vous permet également de spécifier les modèles T4 que vous souhaitez déclencher.
Vous pouvez le télécharger à partir d'ici : https://github.com/MartinF/Dynamo.AutoTT
Construisez-le, copiez les fichiers dll et AddIn dans
C: \ Users \ Documents \ Visual Studio 2012 \ Addins \
et c'est parti.
Si vous voulez le faire démarrer dans VS2012, vous devrez modifier le fichier Dynamo.AutoTT.AddIn et définir la version sur 11.0 dans le fichier AddIn;
la source
Merci à GitHub.com/Mono/T4 , pour le moment, vous pouvez le faire pour les versions .NET Core et Visual Studio en ajoutant ceci à votre
.csproj
fichier:Si vous transformez vos modèles en différents langages de programmation, vous devez ajouter quelque chose comme
<Compile Remove="**\*.vb" />
et<Compile Include="**\*.vb" />
pour que ces fichiers soient compilés même si vous n'avez pas encore généré de fichiers.Remove
etInclude
astuce uniquement nécessaire pour la première génération, ou vous pouvez raccourcir le XML comme ceci:et exécutez simplement build deux fois (pour la première fois). Si vous avez déjà généré des fichiers validés dans le référentiel, il n'y aura aucun problème lors des reconstructions avec les deux exemples.
Dans Visual Studio, vous souhaiterez peut-être voir quelque chose comme ceci:
au lieu de cela:
Ajoutez donc quelque chose comme ceci à votre fichier de projet:
Exemple complet ici: GitHub.com/Konard/T4GenericsExample (inclut la génération de plusieurs fichiers à partir d'un seul modèle).
la source
Voici ma solution - similaire à la réponse acceptée. Nous avons eu un problème avec notre contrôle de source. Les fichiers .cs cibles sont en lecture seule et le T4 a échoué. Voici le code, qui exécute T4 dans le dossier temporaire, compare les fichiers cibles et ne le copie qu'en cas de même changement. Cela ne résout pas le problème avec les fichiers read.only, mais au moins cela ne se produit pas très souvent:
Transform.bat
Vous pouvez essayer d'ajouter votre commande d'extraction sur une ligne (:: Vous pouvez essayer ....)
Dans votre projet, définissez ceci comme une action de pré-construction:
la source
Il vous suffit d'ajouter cette commande à l'événement de pré-construction du projet:
La vérification de configuration = debug, garantit que vous ne régénérez pas le code en mode release, lorsque vous faites la compilation sur le serveur de build TFS par exemple.
la source
Dans Visual Studio 2013, cliquez avec le bouton droit sur le modèle T4 et définissez la propriété transform on build sur true.
la source
Voici comment je l'ai abordé. Lien . Fondamentalement, en s'appuyant sur un excellent blog (blogs.clariusconsulting.net/kzu/how-to-transform-t4-templates-on-build-without-installing-a-visual-studio-sdk/ ne peut pas publier plus de 2 links :() J'ai créé ce fichier .targets à utiliser avec les fichiers proj de Visual Studio.
C'est utile lorsque vous utilisez d'autres dll-s dans votre .tt et que vous voulez que le résultat change à mesure que les dll changent.
Comment ça fonctionne:
Supprimer les références d'assembly de .tt
Dans le fichier proj, utilisez ce code pour configurer la transformation lors de la construction:
La première partie localise TextTransform.exe
$(IncludeForTransform)
sera égal àc:\path\to\dll\foo.dll' -r c:\path\to\dll\bar.dll
car c'est la façon d'ajouter des références pour le TextTransform sur la ligne de commande<_TextTransform Include="$(ProjectDir)**\*.tt" />
cela crée une liste de tous les fichiers tt à l'intérieur du projet et des sous-répertoires<Exec Command="...
produit une ligne pour chacun des fichiers .tt trouvés qui ressemble à"C:\path\to\Transform.exe" "c:\path\to\my\proj\TransformFile.tt" -r"c:\path\to\foo.dll" -r "c:\path\to\bar.dll"
La seule chose à faire est d'ajouter les chemins vers les DLL à l'intérieur de:
Ici
<InProject>False</InProject>
masque ces éléments de la vue SolutionAlors maintenant, vous devriez être en mesure de générer votre code lors de la compilation et du changement de dll-s.
Vous pouvez supprimer l'outil personnalisé (des propriétés à l'intérieur de Visual Studio) afin que le VS n'essaye pas de se transformer et échoue lamentablement à chaque fois. Parce que nous avons supprimé les références d'assemblage à l'étape 2
la source
T4Executer fait cela pour VS2019. Vous pouvez spécifier des modèles à ignorer lors de la construction, et il existe une option d'exécution après la construction.
la source
Vous venez d'installer le package NuGet : Clarius.TransformOnBuild
Ensuite, chaque fois que vous cliquez sur Rebuild project (ou Solution), vos fichiers .tt s'exécuteront
la source
Dans Visual Studio 2017 (probablement les prochaines versions également), vous devez ajouter ceci dans l'événement Pre-build:
ps Modifiez le chemin de votre modèle s'il ne se trouve pas dans le répertoire racine du projet.
la source
Un type a construit un paquet nuget pour ça.
Remarque: j'obtiens des erreurs de compilation de TextTemplate.exe et de ce package (car ce package appelle TextTemplate.exe) mais pas de Visual Studio. Donc, apparemment, le comportement n'est pas le même; la tête haute.
EDIT: Cela a fini par être mon problème.
la source
Voici un événement de pré-construction utilisant uniquement les outils Microsoft et les chemins standard. Il est testé dans vs2019 / netcore3.1.
Remplacez "AppDbContext.tt" par le chemin de fichier relatif à votre projet:
Microsoft a également un guide pour rendre des macros telles que "$ (SolutionDirectory)" disponibles dans le modèle en utilisant T4ParameterValues dans votre fichier de projet.
la source