Вы можете сделать метод runcustomtool с автоматизации EnvDTE как предварительно создать событие?
Я использую T4MVC, и я не могу использовать событие предварительной сборки для запуска TextTransform.exe, поскольку он полагается на EnvDTE и должен выполняться с Visual Studio в качестве хоста.
Если я запускал пользовательский инструмент один раз, он работает хорошо, потому что он помечает себя грязным при его выполнении (AlwaysKeepTemplateDirty = true
), но когда вы открываете решение, оно не запускается при сборке, поэтому мне было интересно, можете ли вы запустить t4 через EnvDTE как событие перед сборкой?
2 ответа:
Я нашел способ сделать это. Это не оптимально, но это действительно работает. Если вы подключитесь к BuildEvents.Онбилдбегин.
Вы нажимаете ALT+F11, чтобы добраться до
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
Это определенно одна из областей T4MVC, которую я хотел бы решить, но не смог найти отличное решение. Я действительно сделал некоторую попытку использовать событие предварительной сборки, но не получил ничего интересного. Но это не значит, что этого нельзя сделать.
Извините, у меня нет решения для вас, но если кто-то что-то придумает, я буду рад интегрировать его в T4MVC.
Дэвид