2010-03-06 21 views
17

¿es posible tener una forma de borrar la ventana Visual Studio OUTPUT, mediante programación? Por ejemplo, la aplicación de depuración SysInternal llamada DebugView tiene el specific command called DBGVIEWCLEAR .. que borra la ventana de registro.¿Se puede borrar la ventana de salida de Visual Studio (depuración) mediante programación?

Por favor, no diga: haga clic con el botón derecho, borre la ventana ... con el mouse. Lo sé, pero eso no es lo que busco.

+0

I Han buscado en el pasado y se quedaron cortos. Ojalá alguien sea más persistente y pueda arrojar algo de luz ... –

Respuesta

6

Para VS 2008 probar este código

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" va a cambiar de la versión a la versión VS.

+0

qué ensamblado/espacio de nombres necesito para hacer referencia a f o EnvDTE80? (por cierto, estoy en VS2010). –

+0

Se agregaron EnvDTE.dll y EnvDTE80.dll. –

+0

¿Esto significa que este código es MUY dependiente de la versión de Visual Studio? (Y no funciona en VS2010 RC ... incluso cuando cambio a 'GetActiveObject (" VisualStudio.DTE.10.0 ");' Compila y ejecuta, pero no borra esa ventana. –

-2

¿Qué hay de Console.Clear()?

+2

Eso solo funciona en una aplicación de consola :(http://stackoverflow.com/questions/766173/how-to-clear -the-console-in-c-net –

2

La primera respuesta funciona en cualquier versión posterior a Visual Studio 2005, pero parece un poco escamosa. Tuve que retrasar 1 segundo antes de borrar la consola y no pude conseguir nada mejor que eso. No tengo idea por qué, pero es mejor que nada. También solo funciona si solo está ejecutando una instancia de Visual Studio. . Tal vez yo "ll hacer una extensión que mira a la RunningObjectTable para recoger la versión correcta

En cualquier caso, esto funciona más o menos

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

tengo "Cadena de clase inválida (Excepción de HRESULT: 0x800401F3 (CO_E_CLASSSTRING))" en EnvDTE80.DTE2 ide = (EnvDTE80.DTE2) Marshal.GetActiveObject ("VisualStudio .DTE.10.0 "); –

+0

Esa cadena solo funcionará con Visual Studio 2010 o posterior. Si está utilizando una versión anterior, tendría que cambiar la .10 a otro número. Si está ejecutando 2010 o posterior , debería funcionar. Puedes utilizar mi herramienta http://wademan.com/Tools/RunningObjectTableDump.zip completamente indocumentada para ver qué objetos se están ejecutando actualmente. No he usado el código en esta publicación en mucho tiempo, por lo que Nunca lo he probado con 2013. –

+0

Creo que mi problema es que me ied para hacerlo con sharepoint saver en aspx con cskdev –

3

para VS 2010:.

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

Con '" VisualStudio.DTE.12.0 "' también funciona bien en VS 2013 ... – ChrFin

Cuestiones relacionadas