.net - ¿Se puede ejecutar RunCustomTool con EnvDTE como un evento previo a la construcción?
macros t4 (2)
Esta es definitivamente una de las áreas de T4MVC que me gustaría resolver, pero no he podido encontrar una gran solución para. Hice un intento al momento de usar un evento de preconstrucción pero no llegué a ningún lado interesante. Lo cual no quiere decir que no se puede hacer.
Lo siento, no tengo una solución para ti, pero si a alguien se le ocurre algo, me gustaría integrarlo en T4MVC.
David
Estoy usando T4MVC y no puedo usar un evento de precompilación para ejecutar TextTransform.exe ya que depende de EnvDTE y debe ejecutarse con Visual Studio como host.
Si AlwaysKeepTemplateDirty = true
una herramienta personalizada una vez, funciona bien porque se marca a sí misma cuando se ejecuta ( AlwaysKeepTemplateDirty = true
), pero cuando abres la solución, no se ejecuta en compilación, así que me preguntaba si podrías ejecutar t4 a través de EnvDTE como un evento de preconstrucción
Descubrí una forma de hacer esto. No es óptimo, pero en realidad funciona. Si se conecta a BuildEvents.OnBuildBegin.
Presiona ALT + F11 para llegar al Macro IDE
, haga clic en EnvironmenEvents
y agregue el manejador de eventos en el siguiente fragmento de código. Asegúrese de que se agrega fuera de la sección de código autogenerado.
El EnvironmentEvents
ahora se ve así:
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