Pergunta

Eu estou usando T4MVC, e eu não posso usar um evento pré-compilação para executar TextTransform.exe como ele se baseia em EnvDTE, e deve ser executado com o Visual Studio como anfitrião.

Se eu tiver personalizado para executar a ferramenta de uma vez, ele funciona bem, porque ele marca a si mesmo sujo quando sua executado (AlwaysKeepTemplateDirty = true), mas quando você abrir a solução, ela não é executada em construir, então eu estava imaginando se você poderia executar t4 via EnvDTE como um evento pré-compilação?

Foi útil?

Solução

Eu descobri uma maneira de fazer isso.Não é o ideal, mas ele realmente funciona.Se você interligação para o BuildEvents.OnBuildBegin.

Você aperta ALT+F11 para chegar ao Macro IDE, clique em EnvironmenEvents e adicione o eventhandler abaixo, trecho de código .Certifique-se de que o seu adicionados fora do geradas automaticamente seção de código.

O EnvironmentEvents agora este aspecto:

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

Outras dicas

Esta é definitivamente uma das áreas do T4MVC que eu gostaria de resolver, mas não consegui encontrar uma ótima solução. Eu fiz algum A tentativa da época para usar um evento antes da construção, mas não cheguei a nenhum lugar interessante. O que não significa que não pode ser feito.

Desculpe, não tenho uma solução para você, mas se alguém tiver alguma coisa, ficaria feliz em integrá -la ao T4MVC.

David

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top