创建 Visual Studio 扩展时,如何在我的自定义命令中调用 Visual Studio 中存在的解决方案级构建命令?

How to invoke Solution level Build command present in Visual Studio in my custom command while creating a Visual Studio extension?

标题几乎说明了一切。我正在编写一个 visual studio 扩展,我正在其中创建一个自定义命令。在此命令的回调中,我需要在我的逻辑中的某个时刻调用 "solution level Build command"。我在 OleMenuCommandService class 中发现了一个 GlobalInvoke(CommandID commandID) 方法。 CommandID 有两个参数“CommandID(Guid menuGroup, int commandID)”。我找不到构建菜单组的菜单组指南。首先,我的上述方法是否正确?如果不是,请指导我采用正确的方法。如果是,我如何找到调用 Build 命令所需的 Guid 和 ID?提前致谢。

您可以拨打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

此外,如果您需要在构建事件的 beginning/end 处执行某些操作,您可以执行类似这样的操作来捕获事件:

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

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

int exitCode = DTEObj.Solution.SolutionBuild.LastBuildInfo;