J'utilise T4MVC et je ne peux pas utiliser un événement de pré-construction pour exécuter TextTransform.exe car il dépend d'EnvDTE et doit être exécuté avec Visual Studio en tant qu'hôte. Si j'ai exécuté une fois l'outil personnalisé, il fonctionne bien parce qu'il se marque sale quand il est exécuté (AlwaysKeepTemplateDirty = true
), mais lorsque vous ouvrez la solution, il ne fonctionne pas sur build, donc je me demandais si vous pouviez courir t4 via EnvDTE comme un événement de pré-construction?Pouvez-vous faire un RunCustomTool avec EnvDTE en tant qu'événement de pré-construction?
Répondre
J'ai trouvé un moyen de le faire. Ce n'est pas optimal, mais cela fonctionne réellement. Si vous vous connectez à BuildEvents.OnBuildBegin.
Vous appuyez sur ALT + F11 pour accéder au Macro IDE
, cliquez sur EnvironmenEvents
et ajoutez le eventhandler dans l'extrait de code ci-dessous. Assurez-vous qu'il est ajouté en dehors de la section de code générée automatiquement.
Le EnvironmentEvents
ressemble maintenant à ceci:
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module EnvironmentEvents
Public Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
If Scope = vsBuildScope.vsBuildScopeSolution Or Scope = vsBuildScope.vsBuildScopeProject Then
Dim projectItem As ProjectItem = DTE.Solution.FindProjectItem("T4MVC.tt")
If Not projectItem Is Nothing Then
If Not projectItem.IsOpen Then
projectItem.Open()
End If
projectItem.Save()
End If
End If
End Sub
#Region "Automatically generated code, do not modify"
'Automatically generated code, do not modify
'Event Sources Begin
<System.ContextStaticAttribute()> Public WithEvents DTEEvents As EnvDTE.DTEEvents
<System.ContextStaticAttribute()> Public WithEvents DocumentEvents As EnvDTE.DocumentEvents
<System.ContextStaticAttribute()> Public WithEvents WindowEvents As EnvDTE.WindowEvents
<System.ContextStaticAttribute()> Public WithEvents TaskListEvents As EnvDTE.TaskListEvents
<System.ContextStaticAttribute()> Public WithEvents FindEvents As EnvDTE.FindEvents
<System.ContextStaticAttribute()> Public WithEvents OutputWindowEvents As EnvDTE.OutputWindowEvents
<System.ContextStaticAttribute()> Public WithEvents SelectionEvents As EnvDTE.SelectionEvents
<System.ContextStaticAttribute()> Public WithEvents BuildEvents As EnvDTE.BuildEvents
<System.ContextStaticAttribute()> Public WithEvents SolutionEvents As EnvDTE.SolutionEvents
<System.ContextStaticAttribute()> Public WithEvents SolutionItemsEvents As EnvDTE.ProjectItemsEvents
<System.ContextStaticAttribute()> Public WithEvents MiscFilesEvents As EnvDTE.ProjectItemsEvents
<System.ContextStaticAttribute()> Public WithEvents DebuggerEvents As EnvDTE.DebuggerEvents
<System.ContextStaticAttribute()> Public WithEvents ProjectsEvents As EnvDTE.ProjectsEvents
<System.ContextStaticAttribute()> Public WithEvents TextDocumentKeyPressEvents As EnvDTE80.TextDocumentKeyPressEvents
<System.ContextStaticAttribute()> Public WithEvents CodeModelEvents As EnvDTE80.CodeModelEvents
<System.ContextStaticAttribute()> Public WithEvents DebuggerProcessEvents As EnvDTE80.DebuggerProcessEvents
<System.ContextStaticAttribute()> Public WithEvents DebuggerExpressionEvaluationEvents As EnvDTE80.DebuggerExpressionEvaluationEvents
'Event Sources End
'End of automatically generated code
#End Region
End Module
Ceci est certainement l'un des domaines de T4MVC que je voudrais résoudre, mais n'ont pas été en mesure de trouver une excellente solution. J'ai fait une certaine tentative à l'époque pour utiliser un événement de pré-construction, mais n'a pas été intéressant. Ce qui ne veut pas dire que ça ne peut pas être fait. Désolé, je n'ai pas de solution pour vous, mais si quelqu'un propose quelque chose, je serais heureux de l'intégrer dans T4MVC.
David
Very nice! Meilleure solution pour le moment :) –
Brilliant. Je pense à toutes sortes de façons d'utiliser ce point d'extension IDE. – Hal
Comme cela ne fonctionne pas dans VS 2012 en raison de l'absence de macros, j'ai fait une extension qui fait la même chose: http://visualstudiogallery.msdn.microsoft.com/8d820b76-9fc4-429f-a95f-e68ed7d3111a. Source sur https://github.com/bennor/AutoT4MVC –