2010-02-26 19 views
9

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.¿Se puede ejecutar RunCustomTool con EnvDTE como un evento de preconstrucción?

Si he ejecutado la herramienta personalizada una vez, funciona bien porque se marca sucio cuando se ejecuta (AlwaysKeepTemplateDirty = true), pero cuando abre la solución, no se ejecuta en compilación, por lo que me preguntaba si podría ejecutar t4 a través de EnvDTE como un evento previo a la construcción?

Respuesta

16

me di cuenta de una manera de hacer esto. No es óptimo, pero en realidad funciona. Si se conecta a BuildEvents.OnBuildBegin.

Presione ALT + F11 para obtener 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 
+1

muy agradable! La mejor solución hasta el momento :) –

+1

Brilliant. Estoy pensando en todo tipo de formas de usar ese punto de extensión IDE. – Hal

+3

Dado que esto no funciona en VS 2012 debido a la falta de macros, hice una extensión que hace lo mismo: http://visualstudiogallery.msdn.microsoft.com/8d820b76-9fc4-429f-a95f-e68ed7d3111a. Fuente en https://github.com/bennor/AutoT4MVC –

1

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 algún intento de en el momento de utilizar un evento de precompilación pero no llegó a ningún lado interesante. Lo cual no quiere decir que no se puede hacer.

Disculpa, no tengo una solución para ti, pero si a alguien se le ocurre algo, me gustaría integrarlo en T4MVC.

David

Cuestiones relacionadas