代码之家  ›  专栏  ›  技术社区  ›  Luhmann

您可以将EnvDTE作为预构建事件来执行RunCustomTool吗?

  •  9
  • Luhmann  · 技术社区  · 15 年前

    我使用的是T4MVC,不能使用预生成事件来运行TextTransform.exe,因为它依赖于EnvDTE,必须以visualstudio作为主机运行。

    如果我曾经运行过一次自定义工具,它工作得很好,因为它在执行时会将自己标记为脏的( AlwaysKeepTemplateDirty = true

    2 回复  |  直到 15 年前
        1
  •  16
  •   Luhmann    15 年前

    我想出了一个办法。它不是最佳的,但它实际上是有效的。如果您连接到BuildEvents.OnBuildBegin。

    Macro IDE EnvironmenEvents 并在下面的代码段中添加eventhandler。确保将其添加到自动生成的代码部分之外。

    EnvironmentEvents 现在看起来像这样:

    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
    
        2
  •  1
  •   David Ebbo    15 年前

    这绝对是T4MVC的一个领域,我想解决,但还没有找到一个很好的解决方案。我确实做了 一些

    对不起,我没有一个解决方案给你,但如果有人提出了什么,我很乐意将它集成到T4MVC中。

    大卫