在Visual Studio 2010中捕获构建输出

Pro*_*ofK 7 build visual-studio-2010 visual-studio

有没有办法可以捕获构建输出,即输出到输出窗口的文本?现在,我唯一可以从输出窗口复制和粘贴文本的替代方法是从命令行构建并将输出重定向到文件.

快速浏览一下C#编译器命令行选项并没有显示为警告和错误等消息指定输出文件的任何选项,因此我猜测VS钩子进入csc.exe进程的输出流,捕获其文本并写入到输出窗口.也许自定义应用程序也可能存在差距.

Ahm*_*mad 5

将以下宏添加到VS EnvironmentEvent模块(工具 - >宏 - >宏IDE ...)或ALT + F11.无论是否成功,构建完成后宏都会运行.

这将管道输出窗口的文本输出,更具体地说Build是输出窗口的视图build_output.log.其他IDE Guids可以在MSDN上找到.

作为参考,解决方案基于HOWTO:获取OutputWindowPane从Visual Studio加载项或宏输出一些字符串

Visual Studio提供了一个Output窗口("View","Other Windows","Output"菜单)来显示消息,调试信息等.该窗口提供了几个可以通过组合框选择的窗格,例如"Source Control", "构建","调试"等

自动化模型(EnvDTE)提供EnvDTE.OutputWindow,EnvDTE.OutputWindowPanes和EnvDTE.OutputWindowPane类.

 Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone

        Const BUILD_OUTPUT_PANE_GUID As String = "{1BD8A850-02D1-11D1-BEE7-00A0C913D1F8}"

        Dim t As OutputWindowPane
        Dim txtOutput As TextDocument
        Dim txtSelection As TextSelection
        Dim vsWindow As Window

        vsWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)

        Dim vsOutputWindow As OutputWindow
        Dim objOutputWindowPane As OutputWindowPane
        Dim objBuildOutputWindowPane As OutputWindowPane
        vsOutputWindow = DirectCast(vsWindow.Object, OutputWindow)

        For Each objOutputWindowPane In vsOutputWindow.OutputWindowPanes
            If objOutputWindowPane.Guid.ToUpper = BUILD_OUTPUT_PANE_GUID Then
                objBuildOutputWindowPane = objOutputWindowPane
                Exit For
            End If
        Next


        txtOutput = objBuildOutputWindowPane.TextDocument
        txtSelection = txtOutput.Selection

        txtSelection.StartOfDocument(False)
        txtSelection.EndOfDocument(True)
        objBuildOutputWindowPane.OutputString(Date.Now)

        txtSelection = txtOutput.Selection
        solutionDir = IO.Path.GetDirectoryName(DTE.Solution.FullName)

        My.Computer.FileSystem.WriteAllText(solutionDir & "\build_output.log", txtSelection.Text, False)


        MsgBox(txtSelection.Text)

    End Sub
Run Code Online (Sandbox Code Playgroud)

以上内容可以调整为可能在每个项目的基础上输出构建信息.构建日志等的文件名可能基于正在构建的当前项目进行配置(对此不太确定),最重要的是,您可以保留构建历史记录.

有一个可以挂钩的VS事件,所以人们可以做的事情是无穷无尽的

这是在VS2010 Ultimate上测试的......