Come eseguire il debug delle estensioni di Visual Studio


93

Sto solo scrivendo un'estensione VSIX per Visual Studio 2010 e non riesco a capire come eseguirne il debug.

Un metodo ovvio consiste nell'output dei messaggi. Usi del modello di estensione Trace.WriteLine(). Ma dove trovarne l'output?

Risposte:


184

È possibile eseguire il debug delle estensioni di Visual Studio come qualsiasi altra applicazione. Hai solo bisogno di configurare l'esperienza di debug per avviare devenv con l'estensione caricata. Prova quanto segue

  • Fare clic con il tasto destro sul progetto e selezionare Proprietà
  • Vai alla scheda Debug

Fare clic sul pulsante di opzione per Start External Program. Puntalo al binario devenv.exe. Sulla mia macchina si trova in

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

Su una macchina non x64 è comunque possibile rimuovere la parte "(x86)".

Quindi imposta gli argomenti della riga di comando su /rootsuffix Exp. Ciò indica a Visual Studio di utilizzare l'hive sperimentale invece del normale hive di configurazione. Per impostazione predefinita, le estensioni VSIX quando vengono create si registreranno nell'hive sperimentale.

Ora puoi F5 e avvierà Visual Studio con VSIX come estensione disponibile.


grazie per questa risposta, ha risolto un problema in un colpo solo. Molto obbligato!
Richard Griffiths

@JaredPar - c'è un modo per dire all'estensione vs2012 di registrarsi nell'alveare sperimentale dell'anteprima vs2015?
Srikanth Venugopalan

1
Sembra che questo funzioni solo se le versioni che usi per il debug e per i test sono le stesse. Quindi non puoi eseguire il debug nel 2013 ed eseguire l'estensione nel 2015. @SrikanthVenugopalan
Maria Ines Parnisari

@miparnisari - sì, così sembra. Un po 'un dolore, però, se stai supportando più versioni.
Srikanth Venugopalan

2
Ciao, cosa vuoi dire che inizierà VS con il mio VSIX come "estensione disponibile"? Dove trovo le estensioni disponibili? Quando vado su Strumenti -> Estensioni e aggiornamenti, vedo solo "Installato", "Online" e "Aggiornamenti".
pabrams

54

La risposta accettata da @JaredPar è tecnicamente corretta, ma soffre del fatto che devi rifarla per ogni sviluppatore, ogni volta che ottieni una nuova copia del codice e ogni volta che il csproj.userfile viene eliminato. Quando lo fai in questo modo, le impostazioni vengono salvate nel csproj.userfile.

Un'opzione migliore è inserire le impostazioni nel csprojfile in modo che non vadano perse. Sfortunatamente, Visual Studio non ti consente di farlo automaticamente, quindi devi aggiungere manualmente le impostazioni. Fortunatamente, le impostazioni sono le stesse per qualsiasi progetto.

Fare clic con il pulsante destro del mouse e scaricare il progetto, quindi fare nuovamente clic con il pulsante destro del mouse e modificare il csprojfile del file di progetto. Nell'XML, aggiungi quanto segue al primo PropertyGroup, ad esempio subito dopo TargetFramework.

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

Ciò presenta i seguenti vantaggi;

  • Lo imposta per il debug e il rilascio
  • Esegue qualsiasi versione di Visual Studio attualmente in esecuzione
  • È archiviato nel controllo del codice sorgente, quindi ogni sviluppatore non deve ricordarsi come farlo :)

Come afferma @MBulli nei commenti, se hai apportato le modifiche nella risposta accettata, elimina il tuo *.csproj.userfile perché le impostazioni in esso sovrascriveranno quelle che hai aggiunto al csprojfile principale .


6
Assicurati di eliminare il file * .csproj.user perché le impostazioni dell'utente hanno la precedenza sulle impostazioni del progetto.
MBulli

Ottima risposta, grazie! Molto più efficiente di quello accettato.
Zverev Evgeniy

Ha funzionato perfettamente per il vs 2019
x0n

2

Il metodo OutputWindowHelper.OutputString scrive nel riquadro della finestra di output "Generale" (Ctrl Alt o). Ho aggiunto questa riga nei miei riferimenti .csproj per ottenerlo in VS 2013

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

Vedi anche questa risposta .


Nota OutputWindowHelper non esiste in Visual Studio 2015. Un computer con solo VS2015 genererà un errore se viene chiamato. Vedi anche github.com/landofjoe/NuspecPackager/issues/1
Quango

0

Se provi a eseguire il debug di UnitTestExtension, dovresti anche collegare il debugger ai processi vstest. *. Exe come descritto qui . Altrimenti potresti vedere il punto di interruzione di attivazione ma il debugger non lo colpirà mai.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.