2011-10-14 7 views
11

Piszę prosty dodatek Visual Studio 2010, aby wykonać wspólną pracę kopiowania tutaj w pracy (pobieranie bibliotek DLL z biblioteki libs).Jak napisać do okna wyjściowego w dodatku Visual Studio 2010?

Chcę, aby postęp kopiowania został zapisany w oknie wyjściowym.

Próbowałem Trace.WriteLine(...) spodziewając się, że to zrobię, ale nie działa, gdy uruchomię dodatek w debugerze. Jeszcze tego nie próbowałem.

Znalazłem kilka przykładów tego w Visual Studio 2008, ale wymagane biblioteki nie są dostępne do odniesienia.

Czy ktoś może wskazać mi, jak napisać do okna wyjściowego? Moje umiejętności googlowania mnie zawiodły.

Odpowiedz

16

Robiłem to dla makra I napisał:

Window window = dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput); 
OutputWindow outputWindow = (OutputWindow) window.Object; 
outputWindow.ActivePane.Activate(); 
outputWindow.ActivePane.OutputString(message); 

Tu jest link do interfejsu DTE: http://msdn.microsoft.com/en-us/library/envdte.dte(v=VS.100).aspx

+0

Co to jest obiekt dte? (czytanie dokumentów teraz, ale byłoby dobrze w odpowiedzi na przyszłe referencje) –

+1

Dla tych, którzy śledzą, dte, jest zdefiniowany w connect.cs, na metodzie connect. Poszukaj tego w dolnej części pliku: private DTE2 _applicationObject; Użyj tego jako dte –

+0

To działało dla mnie :) – Achilles

1

Piszę Visual Studio dodatek i miał takie same problem, jednak próbując powyższej odpowiedzi stwierdziłem, że linia:

outputWindow.ActivePane.Activate(); 

dała błąd.

NullReferenceException - Obiekt nie jest ustawiony na wystąpienie obiektu.

Jednak mam teraz znaleźć nieco inny sposób na rozwiązanie problemu:

Window window = applicationObject.Windows.Item(Constants.vsWindowKindOutput); 
OutputWindow outputWindow = (OutputWindow)window.Object; 
OutputWindowPane owp; 
owp = outputWindow.OutputWindowPanes.Add("new pane"); 
owp.OutputString("hello"); 
8

Jak Robert wskazał, Jana kod wygeneruje wyjątek, gdy nie ma ActivePane. Jeśli jest aktywne okienko, użyje tego panelu, które jest aktywne.

Jeden z problemów, które mam z przykładem Roberta, zależy od miejsca, w którym utworzysz okienko, co w moim przypadku jest metodą Exec, spowoduje utworzenie wielu okienek o tej samej nazwie za każdym razem, gdy zostanie uruchomiony.

W tym mój przykład, w jaki sposób obejść ten problem. Całkiem proste, po prostu sprawdź, czy okno istnieje ...

Powiązane problemy