Как написать в окне вывода в Visual Studio 2010 AddIn?
Я пишу простую надстройку Visual Studio 2010 для выполнения общего задания копирования здесь на работе (получение DLL из libs sln).
Я хочу, чтобы процесс копирования записывался в окно вывода.
Я попробовал Trace.WriteLine(...)
ожидать, что это сделать, но это не происходит, когда я запускаю надстройку в отладчике. Я еще не пробовал это.
Я нашел несколько примеров этого в Visual Studio 2008, но требуемые библиотеки недоступны для ссылки.
Может ли кто-нибудь указать мне, как писать в окно вывода? Мои навыки в поисковых системах меня не подвели.
Ответы
Ответ 1
Я сделал это для макроса, который я написал:
Window window = dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
OutputWindow outputWindow = (OutputWindow) window.Object;
outputWindow.ActivePane.Activate();
outputWindow.ActivePane.OutputString(message);
Вот ссылка для интерфейса DTE:
http://msdn.microsoft.com/en-us/library/envdte.dte(v=VS.100).aspx
Ответ 2
Как заметил Роберт, код Джона будет генерировать исключение, если нет ActivePane. Если есть активная панель, она будет использовать ту область, которая активна.
Одна из проблем, с которыми я столкнулась с примером Роберта, зависит от того, где вы создаете панель, которая в моем случае является методом Exec, при каждом запуске она создаст несколько панелей с одинаковым именем.
Включая мой пример того, как я обошел эту проблему. Довольно просто, сначала проверьте наличие окна...
Window window = _applicationObject.Windows.Item( EnvDTE.Constants.vsWindowKindOutput );
OutputWindow outputWindow = ( OutputWindow )window.Object;
OutputWindowPane outputWindowPane = null;
for ( uint i = 1; i <= outputWindow.OutputWindowPanes.Count; i++ )
{
if ( outputWindow.OutputWindowPanes.Item( i ).Name.Equals( OUTPUT_WINDOW_NAME , StringComparison.CurrentCultureIgnoreCase ) )
{
outputWindowPane = outputWindow.OutputWindowPanes.Item( i );
break;
}
}
if ( outputWindowPane == null )
outputWindowPane = outputWindow.OutputWindowPanes.Add( OUTPUT_WINDOW_NAME );
outputWindowPane.OutputString( "Message" );
Ответ 3
Я пишу надстройку Visual Studio и имею ту же проблему, однако при попытке ответить выше я обнаружил, что строка:
outputWindow.ActivePane.Activate();
дал ошибку.
NullReferenceException - ссылка на объект не установлена в экземпляр объекта.
Однако теперь я нашел несколько иной способ решения проблемы:
Window window = applicationObject.Windows.Item(Constants.vsWindowKindOutput);
OutputWindow outputWindow = (OutputWindow)window.Object;
OutputWindowPane owp;
owp = outputWindow.OutputWindowPanes.Add("new pane");
owp.OutputString("hello");