DTE.ExecuteCommand并等待

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)

是否有一些同步对象或有关已执行命令状态的信息?

谢谢

K F*_*ley 5

嘿伙计们,如果你还在寻找这个问题的答案,试试吧.

绑定到发布事件并成功推送您的外部命令.我正在做类似的事情来构建解决方案然后解雇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)

应该这样做.

干杯,

凯尔