Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I write to the Visual Studio Output Window in My Custom Tool?

I am writing a custom tool and I currently have it doing what I want as far as functionality. I would like to be able to write to Visual Studio if something goes wrong. (Incorrectly formatted code or whatever).

Are there any standards for this? Right now I basically can force the tool to fail and Visual Studio puts in a warning that it has done so. I'd like a category in the Output window with any resulting messages I want to send. I could also live with a more descriptive task/warning in the Error list window.

like image 452
Jeff Martin Avatar asked Jul 07 '09 19:07

Jeff Martin


People also ask

How do I get the output window in Visual Studio?

To display the Output window whenever you build a project, in the Options dialog box, on the Projects and Solutions > General page, select Show Output window when build starts.

How do I turn on output in Visual Studio?

Go to Tools, Options, Projects And Solutions, and uncheck Show Output Window when Build Starts.

How do I display the output window or console in Visual Studio?

in the "Ouput Window". you can usually do CTRL-ALT-O to make it visible. Or through menus using View->Output.


1 Answers

Output Window

To write to the "General" output window in Visual Studio, you need to do the following:

IVsOutputWindow outWindow = Package.GetGlobalService( typeof( SVsOutputWindow ) ) as IVsOutputWindow;  Guid generalPaneGuid = VSConstants.GUID_OutWindowGeneralPane; // P.S. There's also the GUID_OutWindowDebugPane available. IVsOutputWindowPane generalPane; outWindow.GetPane( ref generalPaneGuid , out generalPane );  generalPane.OutputString( "Hello World!" ); generalPane.Activate(); // Brings this pane into view 

If, however, you want to write to a custom window, this is what you need to do:

IVsOutputWindow outWindow = Package.GetGlobalService( typeof( SVsOutputWindow ) ) as IVsOutputWindow;  // Use e.g. Tools -> Create GUID to make a stable, but unique GUID for your pane. // Also, in a real project, this should probably be a static constant, and not a local variable Guid customGuid = new Guid("0F44E2D1-F5FA-4d2d-AB30-22BE8ECD9789"); string customTitle = "Custom Window Title"; outWindow.CreatePane( ref customGuid, customTitle, 1, 1 );  IVsOutputWindowPane customPane; outWindow.GetPane( ref customGuid, out customPane);  customPane.OutputString( "Hello, Custom World!" ); customPane.Activate(); // Brings this pane into view 

Details on IVsOutputWindow and IVsOutputWindowPane can be found on MSDN.

Error List

For adding items to the error list, the IVsSingleFileGenerator has a method call void Generate(...) which has a parameter of the type IVsGeneratorProgress. This interface has a method void GeneratorError() which lets you report errors and warnings to the Visual Studio error list.

public class MyCodeGenerator : IVsSingleFileGenerator {     ...     public void Generate( string inputFilePath, string inputFileContents, string defaultNamespace, out IntPtr outputFileContents, out int output, IVsGeneratorProgress generateProgress )     {         ...         generateProgress.GeneratorError( false, 0, "An error occured", 2, 4);         ...     }     ... } 

The details of GeneratorError() can be found on MSDN.

like image 52
Alex Avatar answered Oct 08 '22 05:10

Alex