19

是否有可能以编程方式清除 Visual Studio OUTPUT窗口?例如,SysInternal 的名为 DebugView 的调试器应用程序具有名为 DBGVIEWCLEAR .. 的特定命令,可清除日志窗口。

请不要说:右键单击,清除窗口..用鼠标。我知道,但这不是我所追求的。

4

5 回答 5

7

对于 VS 2008 试试这个代码

EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.9.0");
ide.ExecuteCommand("Edit.ClearOutputWindow", "");
System.Runtime.InteropServices.Marshal.ReleaseComObject(ide);

“VisualStudio.DTE.9.0”将从 VS 版本更改为版本。

于 2010-03-06T05:57:22.787 回答
3

对于 VS 2010:

//Add reference EnvDTE100
static void ClearOutput()
{
    EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.10.0");
    ide.ToolWindows.OutputWindow.ActivePane.Clear();
}
于 2012-03-29T11:06:36.753 回答
2

第一个答案适用于 Visual Studio 2005 之后的任何版本,但似乎有点不稳定。在清除控制台之前,我不得不延迟 1 秒,而且没有比这更好的了。不知道为什么,但总比没有好。它也仅在您只运行一个 Visual Studio 实例时才有效。也许我会做一个扩展来查看 RunningObjectTable 以选择正确的版本。

无论如何,这或多或少都有效。

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;


namespace VisualStudioHelper {
    public class VstHelper {
        // Add a Project Reference to "Microsoft Development Environment Properties 8.0" 
        // (the one for Visual Studio, not SQL Server)
        public static void VstClearOutputWindow() {
            if (!Debugger.IsAttached)
                return;

            Application.DoEvents();
            Thread.Sleep(1000);
            EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.10.0");
            ide.ExecuteCommand("Edit.ClearOutputWindow", "");
            Marshal.ReleaseComObject(ide);
        }
    }
}
于 2011-05-04T16:23:23.303 回答
0

对于 VS 2019,试试这个代码

//添加对Interop.EnvDTE100的引用

EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");

ide.ExecuteCommand("Edit.ClearOutputWindow", ""); System.Runtime.InteropServices.Marshal.ReleaseComObject(ide);

于 2020-02-21T19:28:46.380 回答
-1

Console.Clear()怎么样?

于 2010-03-06T05:56:54.713 回答