So debuggen Sie Visual Studio-Erweiterungen

93

Ich schreibe gerade eine VSIX-Erweiterung für Visual Studio 2010 und kann nicht herausfinden, wie ich sie debuggen kann.

Eine naheliegende Methode ist die Ausgabe von Nachrichten. Erweiterungsvorlage verwendet Trace.WriteLine(). Aber wo findet man die Ausgabe?

Lu55
quelle

Antworten:

184

Visual Studio-Erweiterungen können wie jede andere Anwendung debuggt werden. Sie müssen nur die Debug-Erfahrung einrichten, um devenv mit der geladenen Erweiterung zu starten. Versuche Folgendes

  • Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften
  • Gehen Sie zur Registerkarte Debug

Klicken Sie auf das Optionsfeld für Start External Program. Zeigen Sie auf die Binärdatei devenv.exe. Auf meinem Computer befindet es sich bei

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

Auf einem Nicht-x64-Computer können Sie jedoch den Teil "(x86)" entfernen.

Setzen Sie dann die Befehlszeilenargumente auf /rootsuffix Exp. Dadurch wird Visual Studio angewiesen, die experimentelle Struktur anstelle der normalen Konfigurationsstruktur zu verwenden. Standardmäßig registrieren sich VSIX-Erweiterungen beim Erstellen im experimentellen Hive.

Jetzt können Sie F5 und es wird Visual Studio mit Ihrem VSIX als verfügbare Erweiterung starten.

JaredPar
quelle
Vielen Dank für diese Antwort, ein Problem mit einem Schlag gelöst. Herzlichen Dank!
Richard Griffiths
@JaredPar - Gibt es eine Möglichkeit, die Erweiterung vs2012 anzuweisen, sich im experimentellen Bienenstock der Vorschau vs2015 zu registrieren?
Srikanth Venugopalan
1
Es scheint, dass dies nur funktioniert, wenn die Versionen, die Sie zum Debuggen und Testen verwenden, identisch sind. Sie können also 2013 nicht debuggen und die Erweiterung 2015 ausführen. @SrikanthVenugopalan
Maria Ines Parnisari
@iparnisari - ja, so scheint es. Eine Art Schmerz, wenn Sie mehrere Versionen unterstützen.
Srikanth Venugopalan
2
Hallo, was meinst du damit, dass VS mit meinem VSIX als "verfügbare Erweiterung" gestartet wird? Wo finde ich die verfügbaren Erweiterungen? Wenn ich zu Extras -> Erweiterungen und Updates gehe, werden nur "Installiert", "Online" und "Updates" angezeigt.
Pabrams
54

Die von @JaredPar akzeptierte Antwort ist technisch korrekt, leidet jedoch unter der Tatsache, dass Sie sie für jeden Entwickler wiederholen müssen, jedes Mal, wenn Sie eine neue Kopie des Codes erhalten, und jedes Mal, wenn die csproj.userDatei gelöscht wird. Wenn Sie dies auf diese Weise tun, werden die Einstellungen in der csproj.userDatei gespeichert.

Eine bessere Option ist es, die Einstellungen in die csprojDatei aufzunehmen, damit sie nicht verloren gehen. Leider können Sie dies in Visual Studio nicht automatisch tun, sodass Sie die Einstellungen manuell hinzufügen müssen. Glücklicherweise sind die Einstellungen für jedes Projekt gleich.

Klicken Sie mit der rechten Maustaste und entladen Sie das Projekt. Klicken Sie dann erneut mit der rechten Maustaste und bearbeiten Sie die csprojProjektdatei. Fügen Sie im XML Folgendes zum ersten hinzu PropertyGroup, z. B. direkt danach TargetFramework.

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

Dies hat die folgenden Vorteile:

  • Es richtet es für das Debuggen und Freigeben ein
  • Es wird jede Version von Visual Studio ausgeführt, die Sie gerade ausführen
  • Es wird in die Quellcodeverwaltung eingecheckt, sodass sich nicht jeder Entwickler daran erinnern muss, wie es geht :)

Wie @MBulli in den Kommentaren feststellt, löschen Sie Ihre *.csproj.userDatei , wenn Sie die Änderungen in der akzeptierten Antwort vorgenommen haben, da die darin enthaltenen Einstellungen diejenigen überschreiben, die Sie der Hauptdatei hinzugefügt haben csproj.

Rob Prouse
quelle
6
Stellen Sie sicher, dass Sie die Datei * .csproj.user löschen, da die Benutzereinstellungen Vorrang vor den Projekteinstellungen haben.
MBulli
Tolle Antwort, danke! Viel effizienter als der akzeptierte.
Zverev Evgeniy
Arbeitete perfekt für vs 2019
x0n
2

Die OutputWindowHelper.OutputString- Methode schreibt in den Ausgabefensterbereich "Allgemein" (Strg + Alt). Ich habe diese Zeile in meine .csproj-Referenzen eingefügt, um dies in VS 2013 zu erhalten

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

Siehe auch diese Antwort .

tcb
quelle
Hinweis OutputWindowHelper ist in Visual Studio 2015 nicht vorhanden. Ein Computer mit nur VS2015 gibt einen Fehler aus, wenn dieser aufgerufen wird. Siehe auch github.com/landofjoe/NuspecPackager/issues/1
Quango
0

Wenn Sie versuchen, eine UnitTestExtension zu debuggen, sollten Sie den Debugger auch an die vstest. *. Exe-Prozesse anhängen, wie hier beschrieben . Andernfalls wird möglicherweise der Haltepunkt für die Aktivierung angezeigt, der Debugger wird ihn jedoch niemals erreichen.

smkanadl
quelle