Jak debugować rozszerzenia programu Visual Studio

93

Piszę tylko rozszerzenie VSIX dla Visual Studio 2010 i nie mogę dowiedzieć się, jak je debugować.

Jedną z oczywistych metod jest wyprowadzanie wiadomości. Szablon rozszerzenia używa Trace.WriteLine(). Ale gdzie znaleźć to wyjście?

Lu55
źródło

Odpowiedzi:

185

Rozszerzenia programu Visual Studio można debugować tak jak każdą inną aplikację. Wystarczy skonfigurować środowisko debugowania, aby uruchomić devenv z załadowanym rozszerzeniem. Spróbuj wykonać następujące czynności

  • Kliknij prawym przyciskiem myszy projekt i wybierz Właściwości
  • Przejdź do karty Debugowanie

Kliknij przycisk opcji dla Start External Program. Wskaż plik binarny devenv.exe. Na moim komputerze znajduje się pod adresem

C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe

Jednak na komputerze innym niż x64 można usunąć część „(x86)”.

Następnie ustaw argumenty wiersza poleceń na /rootsuffix Exp. To informuje program Visual Studio, aby używał eksperymentalnej gałęzi zamiast normalnej gałęzi konfiguracji. Domyślnie rozszerzenia VSIX po zbudowaniu zarejestrują się w gałęzi eksperymentalnej.

Teraz możesz F5 i uruchomi Visual Studio z VSIX jako dostępnym rozszerzeniem.

JaredPar
źródło
dziękuję za tę odpowiedź, rozwiązałem problem jednym trafieniem. Bardzo zobowiązany!
Richard Griffiths
@JaredPar - czy jest sposób, aby powiedzieć rozszerzeniu vs2012, aby zarejestrowało się w gałęzi eksperymentalnej podglądu vs2015?
Srikanth Venugopalan,
1
Wygląda na to, że działa to tylko wtedy, gdy wersje używane do debugowania i testowania są takie same. Nie możesz więc debugować w 2013 i uruchomić rozszerzenia w 2015. @SrikanthVenugopalan
Maria Ines Parnisari
@miparnisari - tak, na to wygląda. To trochę uciążliwe, jeśli obsługujesz wiele wersji.
Srikanth Venugopalan
2
Cześć, co masz na myśli, mówiąc, że rozpocznie się VS z moim VSIX jako „dostępnym rozszerzeniem”? Gdzie znajdę dostępne rozszerzenia? Kiedy idę do Narzędzia -> Rozszerzenia i aktualizacje, widzę tylko „Zainstalowane”, „Online” i „Aktualizacje”.
pabrams
54

Zaakceptowana odpowiedź @JaredPar jest technicznie poprawna, ale cierpi z powodu faktu, że musisz ją powtórzyć dla każdego programisty, za każdym razem, gdy otrzymasz nową kopię kodu i za każdym razem, gdy csproj.userplik zostanie usunięty. Gdy zrobisz to w ten sposób, ustawienia zostaną zapisane w csproj.userpliku.

Lepszą opcją jest umieszczenie ustawień w csprojpliku, aby nie zostały utracone. Niestety, Visual Studio nie pozwala na zrobienie tego automatycznie, więc musisz ręcznie dodać ustawienia. Na szczęście ustawienia są takie same dla każdego projektu.

Kliknij prawym przyciskiem myszy i zwolnij projekt, a następnie kliknij ponownie prawym przyciskiem myszy i edytuj csprojplik projektu. W kodzie XML dodaj następujące elementy do pierwszego PropertyGroup, na przykład zaraz po TargetFramework.

<StartAction>Program</StartAction>
<StartProgram>$(DevEnvDir)\devenv.exe</StartProgram>
<StartArguments>/rootsuffix Exp</StartArguments>

Ma to następujące zalety;

  • Konfiguruje go do debugowania i wydania
  • Działa niezależnie od aktualnie używanej wersji programu Visual Studio
  • Jest sprawdzany w kontroli źródła, więc każdy programista nie musi pamiętać, jak to zrobić :)

Jak stwierdza @MBulli w komentarzach, jeśli dokonałeś zmian w zaakceptowanej odpowiedzi, usuń *.csproj.userplik, ponieważ ustawienia w nim zastąpią te, które dodałeś do głównego csprojpliku.

Rob Prouse
źródło
6
Pamiętaj, aby usunąć plik * .csproj.user, ponieważ ustawienia użytkownika mają pierwszeństwo przed ustawieniami projektu.
MBulli
Świetna odpowiedź, dzięki! Znacznie wydajniejszy niż akceptowany.
Zverev Evgeniy
Działało idealnie w porównaniu z 2019
x0n
2

Metoda OutputWindowHelper.OutputString zapisuje w okienku okna danych wyjściowych „Ogólne” (Ctrl Alt o). Dodałem tę linię w moich odniesieniach .csproj, aby uzyskać to w VS 2013

<Reference Include="Microsoft.VisualStudio.Services.Integration, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />

Zobacz także tę odpowiedź .

tcb
źródło
Uwaga OutputWindowHelper nie istnieje w programie Visual Studio 2015. Maszyna z tylko VS2015 zgłosi błąd, jeśli zostanie wywołana. Zobacz także github.com/landofjoe/NuspecPackager/issues/1
Quango
0

Jeśli spróbujesz debugować UnitTestExtension, powinieneś również dołączyć debugger do procesów vstest. *. Exe, takich jak opisane tutaj . W przeciwnym razie możesz zobaczyć punkt przerwania aktywacji, ale debugger nigdy go nie trafi.

smkanadl
źródło