Visual Studio(调试)输出窗口可以通过编程方式清除吗?

21

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

请不要说:用鼠标右键,清空窗口。我知道这个方法,但那不是我想要的。


我曾经回顾过,但没有找到答案。希望有人更有毅力,能够为我们提供一些线索... - Sky Sanders
5个回答

8

对于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版本而改变。

"

我需要引用哪个程序集/命名空间来使用EnvDTE80?(顺便说一句,我在使用VS2010)。 - Pure.Krome
已添加 EnvDTE.dll 和 EnvDTE80.dll。 - Adriaan Stander
这意味着这段代码非常依赖于Visual Studio的版本?(即使我更改为GetActiveObject("VisualStudio.DTE.10.0");,它也无法在VS2010 RC中工作...)编译和运行,但无法清除该窗口。 - Pure.Krome
我撒谎了,它确实清除了窗口。不知道第一次为什么没有清除。 - Pure.Krome
可能需要解释这段代码放在哪里。只是说。 - PastExpiry.com

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();
}

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);
        }
    }
}

1
我在EnvDTE80.DTE2中遇到了“无效的类字符串(HRESULT异常:0x800401F3(CO_E_CLASSSTRING))”,其中ide =(EnvDTE80.DTE2)Marshal.GetActiveObject(“VisualStudio.DTE.10.0”); - Sebastian 506563
该字符串仅适用于Visual Studio 2010或更高版本。如果您使用的是早期版本,则必须将“.10。”更改为其他数字。如果您正在运行2010或更高版本,则应该可以正常工作。您可以使用我完全未记录的http://wademan.com/Tools/RunningObjectTableDump.zip实用程序查看当前实际运行的对象。我很久没有使用这篇文章中的代码了,所以我从未在2013年进行过测试。 - Wade Hatler
我认为我的问题在于我尝试使用CSKDEV在ASPX上使用SharePoint Saver来完成它。 - Sebastian 506563

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);


-2

3
那只适用于控制台应用程序 :( https://dev59.com/QkfRa4cB1Zd3GeqP7kWu - Pure.Krome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接