TcK*_*cKs 8 c# macros automation visual-studio envdte
我想使用宏来发布我的webapplication项目.小问题是,DTE.ExecuteCommand异步运行,我需要等到命令完成.
例:
DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
DTE.ActiveWindow.Object.GetItem("04 - Products\04 - Products.WSS").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Publish")
'// now I want copy (and overwrite) some files, but AFTER the publish
Run Code Online (Sandbox Code Playgroud)
是否有一些同步对象或有关已执行命令状态的信息?
谢谢
嘿伙计们,如果你还在寻找这个问题的答案,试试吧.
绑定到发布事件并成功推送您的外部命令.我正在做类似的事情来构建解决方案然后解雇MSpec测试运行器(博客文章).
为此,您需要为PublishEvents_OnPublishDone添加一个钩子.通过转到EnvironmentEvents模块并添加以下内容来执行此操作:
<System.contextStaticAttribute()> Public WithEvents PublishEvents As EnvDTE80.PublishEvents
Private Sub PublishEvents_OnPublishDone(ByVal Success As Boolean) Handles PublishEvents.OnPublishDone
'call custom module sub here.
End Sub
Run Code Online (Sandbox Code Playgroud)
如果你只想运行外部命令,有时候会做这样的事情.像这样创建你的宏:
Public runExternalCommandOnComplete As Boolean = False
Sub PublishAndRunExternalCommand()
DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
DTE.ActiveWindow.Object.GetItem("04 - Products\04 - Products.WSS").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Publish")
runExternalCommandOnComplete = True
End Sub
Run Code Online (Sandbox Code Playgroud)
然后在EnvironmentEvents中添加:(注意:CustomMacros是您将代码放在上面的模块的名称)
<System.contextStaticAttribute()> Public WithEvents PublishEvents As EnvDTE80.PublishEvents
Private Sub PublishEvents_OnPublishDone(ByVal Success As Boolean) Handles PublishEvents.OnPublishDone
CustomMacros.runExternalCommandOnComplete = False
'Where ExternalCommand1 matches the command you want to run
DTE.ExecuteCommand("Tools.ExternalCommand1")
End Sub
Run Code Online (Sandbox Code Playgroud)
应该这样做.
干杯,
凯尔