هل يمكنك القيام بوقت Runcustomtool مع Envdte كحدث قبل البناء؟
سؤال
أنا أستخدم T4MVC ، ولا يمكنني استخدام حدث ما قبل البناء لتشغيل TextTransform.exe لأنه يعتمد على Envdte ، ويجب تشغيله مع Visual Studio كمضيف.
إذا قمت بتشغيل أداة مخصصة مرة واحدة ، فهي تعمل بشكل جيد لأنها تمثل نفسها قذرة عند تنفيذها (AlwaysKeepTemplateDirty = true
) ، ولكن عندما تفتح الحل ، لا يعمل على البناء ، لذلك كنت أتساءل عما إذا كان يمكنك تشغيل T4 عبر Envdte كحدث ما قبل البناء؟
المحلول
لقد اكتشفت طريقة للقيام بذلك. انها ليست مثالية ، لكنها تعمل في الواقع. إذا قمت بتوصيل إلى buildevents.onbuildbegin.
يمكنك دفع 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.
ديفيد