Comment déboguer les extensions Visual Studio


93

J'écris juste une extension VSIX pour Visual Studio 2010 et je ne sais pas comment la déboguer.

Une méthode évidente consiste à envoyer des messages. Le modèle d'extension utilise Trace.WriteLine(). Mais où trouver sa sortie?

Réponses:


184

Les extensions Visual Studio peuvent être déboguées comme toute autre application. Il vous suffit de configurer l'expérience de débogage pour lancer devenv avec l'extension chargée. Essayez ce qui suit

  • Faites un clic droit sur le projet et sélectionnez Propriétés
  • Accédez à l'onglet Débogage

Cliquez sur le bouton radio pour Start External Program. Faites-le pointer vers le binaire devenv.exe. Sur ma machine, il est situé à

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

Sur une machine non x64, vous pouvez supprimer la partie "(x86)".

Définissez ensuite les arguments de la ligne de commande sur /rootsuffix Exp. Cela indique à Visual Studio d'utiliser la ruche expérimentale au lieu de la ruche de configuration normale. Par défaut, les extensions VSIX une fois construites s'enregistreront dans la ruche expérimentale.

Vous pouvez maintenant F5 et il démarrera Visual Studio avec votre VSIX en tant qu'extension disponible.


merci pour cette réponse, a résolu un problème en un seul coup. Infiniment reconnaissant!
Richard Griffiths

@JaredPar - existe-t-il un moyen de dire à l'extension vs2012 de s'enregistrer dans la ruche expérimentale de l'aperçu de vs2015?
Srikanth Venugopalan

1
Il semble que cela ne fonctionne que si les versions que vous utilisez pour déboguer et tester sont les mêmes. Vous ne pouvez donc pas déboguer en 2013 et exécuter l'extension en 2015. @SrikanthVenugopalan
Maria Ines Parnisari

@miparnisari - oui, semble-t-il. Un peu pénible cependant, si vous supportez plusieurs versions.
Srikanth Venugopalan

2
Salut, que voulez-vous dire qu'il démarrera VS avec mon VSIX en tant qu '"extension disponible"? Où puis-je trouver les extensions disponibles? Lorsque je vais dans Outils -> Extensions et mises à jour, je ne vois que «Installé», «En ligne» et «Mises à jour».
pabrams

54

La réponse acceptée par @JaredPar est techniquement correcte, mais souffre du fait que vous devez la refaire pour chaque développeur, chaque fois que vous obtenez une nouvelle copie du code et chaque fois que le csproj.userfichier est supprimé. Lorsque vous procédez ainsi, les paramètres sont enregistrés dans le csproj.userfichier.

Une meilleure option consiste à mettre les paramètres dans le csprojfichier afin qu'ils ne soient pas perdus. Malheureusement, Visual Studio ne vous permet pas de le faire automatiquement, vous devez donc ajouter manuellement les paramètres. Heureusement, les paramètres sont les mêmes pour tous les projets.

Cliquez avec le bouton droit de la souris et déchargez le projet, puis cliquez à nouveau avec le bouton droit et modifiez le csprojfichier de fichier du projet. Dans le XML, ajoutez ce qui suit au premier PropertyGroup, par exemple juste après TargetFramework.

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

Cela présente les avantages suivants;

  • Il le configure pour le débogage et la publication
  • Il exécute la version de Visual Studio que vous exécutez actuellement
  • Il est archivé dans le contrôle de code source, donc chaque développeur n'a pas à se souvenir comment le faire :)

Comme l'indique @MBulli dans les commentaires, si vous avez apporté les modifications à la réponse acceptée, supprimez votre *.csproj.userfichier car les paramètres qu'il contient remplaceront ceux que vous avez ajoutés au csprojfichier principal .


6
Assurez-vous de supprimer le fichier * .csproj.user car les paramètres utilisateur ont priorité sur les paramètres du projet.
MBulli

Excellente réponse, merci! Beaucoup plus efficace que celui accepté.
Zverev Evgeniy

A parfaitement fonctionné pour vs 2019
x0n

2

La méthode OutputWindowHelper.OutputString écrit dans le volet de la fenêtre de sortie «Général» (Ctrl Alt o). J'ai ajouté cette ligne dans mes références .csproj pour l'obtenir dans VS 2013

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

Voir également cette réponse .


Remarque OutputWindowHelper n'existe pas dans Visual Studio 2015. Un ordinateur avec uniquement VS2015 lèvera une erreur s'il est appelé. Voir aussi github.com/landofjoe/NuspecPackager/issues/1
Quango

0

Si vous essayez de déboguer un UnitTestExtension, vous devez également attacher le débogueur aux processus vstest. *. Exe comme décrit ici . Sinon, vous pourriez voir le point d'arrêt d'activation mais le débogueur ne l'atteindra jamais.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.