【问题标题】:Can the Visual Studio (debug) Output window be programmatically cleared?能否以编程方式清除 Visual Studio(调试)输出窗口?
【发布时间】:2020-02-22 03:28:46
【问题描述】:

是否有可能以编程方式清除 Visual Studio OUTPUT 窗口?例如,SysInternal 的名为 DebugView 的调试器应用程序有 specific command called DBGVIEWCLEAR .. 它会清除日志窗口。

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

【问题讨论】:

  • 我过去看了看,结果很短。希望有人更坚持,可以阐明一些...

标签: visual-studio debugging consoleappender


【解决方案1】:

对于 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 上)。
  • 添加了 EnvDTE.dll 和 EnvDTE80.dll。
  • 所以这意味着这段代码非常依赖于 Visual Studio 版本? (而且它在 VS2010 RC 中不起作用......即使我更改为 GetActiveObject("VisualStudio.DTE.10.0"); 编译并运行,但不会清除该窗口。
  • 我说谎。它确实清除了窗口。不知道为什么它不是第一次出现。
  • 可能想解释一下这段代码的去向。只是说
【解决方案2】:

对于 VS 2010:

//Add reference EnvDTE100
static void ClearOutput()
{
    EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.10.0");
    ide.ToolWindows.OutputWindow.ActivePane.Clear();
}

【讨论】:

    【解决方案3】:

    第一个答案适用于 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);
            }
        }
    }
    

    【讨论】:

    • 我在 EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.10.0") 中有“无效的类字符串(HRESULT 异常:0x800401F3 (CO_E_CLASSSTRING));
    • 该字符串仅适用于 Visual Studio 2010 或更高版本。如果您使用的是早期版本,则必须更改 .10。到另一个号码。如果您运行的是 2010 或更高版本,它应该可以工作。您可以使用我完全未记录的wademan.com/Tools/RunningObjectTableDump.zip 实用程序来查看当前实际运行的对象。好久没用这个帖子里的代码了,所以也没用2013测试过。
    • 我认为我的问题是我尝试使用 cskdev 在 aspx 上的 sharepoint saver 进行此操作
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多