1

标题基本概括了所有内容。我正在编写一个 Visual Studio 扩展,在其中创建自定义命令。在此命令的回调中,我需要在我的逻辑中的某个时刻调用“解决方案级别构建命令”。我在 OleMenuCommandService 类中发现了一个GlobalInvoke(CommandID commandID)方法。CommandID 接受两个参数“ CommandID(Guid menuGroup, int commandID) ”。我找不到构建菜单组的菜单组指南。首先,我在上述方法中是否正确?如果不是,请指导我采取正确的方法。如果是,我如何找到调用 Build 命令所需的 Guid 和 ID?提前致谢。

4

2 回答 2

0

你可以打电话DTE.ExecuteCommand("Build.BuildSolution")

如果要使用 guid 和 ID,请参见以下 VB 示例:

Sub Run(DTE As DTE2, package As Package)
    Dim cmd As EnvDTE.Command
    Dim shell As Microsoft.VisualStudio.Shell.Interop.IVsUIShell
    Dim arg As Object
    Dim guid As System.Guid
    Dim serviceProvider As System.IServiceProvider
    serviceProvider = New Microsoft.VisualStudio.Shell.ServiceProvider(
               CType(DTE, Microsoft.VisualStudio.OLE.Interop.IServiceProvider))
    shell = serviceProvider.GetService(GetType(Microsoft.VisualStudio.Shell.Interop.SVsUIShell))
    cmd = DTE.Commands.Item("Build.BuildSolution", 0)
    guid = New System.Guid(cmd.Guid)
    shell.PostExecCommand(guid, cmd.ID, 0, arg)
End Sub
于 2018-08-09T05:40:34.797 回答
0

此外,如果您需要在构建事件的开始/结束时执行某些操作,您可以执行以下操作来捕获事件:

mDte.Events.BuildEvents.OnBuildBegin += OnBuildBegin;
mDte.Events.BuildEvents.OnBuildDone += OnBuildDone;

或者您可以通过编程方式获取构建结果并检查构建是成功还是失败。如果构建成功,exitCode将为 0,否则为 0:

int exitCode = DTEObj.Solution.SolutionBuild.LastBuildInfo;
于 2018-08-30T12:34:24.407 回答