Cómo depurar extensiones de Visual Studio

93

Solo estoy escribiendo una extensión VSIX para Visual Studio 2010 y no puedo encontrar la manera de depurarla.

Un método obvio es enviar mensajes. Usos de la plantilla de extensión Trace.WriteLine(). ¿Pero dónde encontrar su salida?

Lu55
fuente

Respuestas:

184

Las extensiones de Visual Studio se pueden depurar como cualquier otra aplicación. Solo necesita configurar la experiencia de depuración para iniciar devenv con la extensión cargada. Prueba lo siguiente

  • Haga clic derecho en el proyecto y seleccione Propiedades
  • Vaya a la pestaña Depurar

Haga clic en el botón de opción para Start External Program. Apunte al binario devenv.exe. En mi máquina está ubicado en

C: \ Archivos de programa (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe

Sin embargo, en una máquina que no sea x64, puede eliminar la parte "(x86)".

Luego establezca los argumentos de la línea de comando en /rootsuffix Exp. Esto le dice a Visual Studio que use la colmena experimental en lugar de la colmena de configuración normal. De forma predeterminada, las extensiones de VSIX cuando se construyan se registrarán en la colmena experimental.

Ahora puede F5 e iniciará Visual Studio con su VSIX como una extensión disponible.

JaredPar
fuente
gracias por esta respuesta, resolvió un problema de un solo golpe. ¡Muy agradecido!
Richard Griffiths
@JaredPar: ¿hay alguna manera de decirle a la extensión vs2012 que se registre en la colmena experimental de la vista previa de vs2015?
Srikanth Venugopalan
1
Parece que esto solo funciona si las versiones que usa para depurar y probar son las mismas. Por lo tanto, no puede depurar en 2013 y ejecutar la extensión en 2015. @SrikanthVenugopalan
Maria Ines Parnisari
@miparnisari: sí, eso parece. Sin embargo, es un poco molesto si admite varias versiones.
Srikanth Venugopalan
2
Hola, ¿qué quieres decir con que comenzará VS con mi VSIX como una "extensión disponible"? ¿Dónde encuentro las extensiones disponibles? Cuando voy a Herramientas -> Extensiones y actualizaciones, solo veo "Instaladas", "En línea" y "Actualizaciones".
pabrams
54

La respuesta aceptada por @JaredPar es técnicamente correcta, pero adolece del hecho de que debe rehacerla para cada desarrollador, cada vez que obtenga una copia nueva del código y cada vez csproj.userque se elimine el archivo. Cuando lo hace de esa manera, la configuración se guarda en elcsproj.user archivo.

Una mejor opción es poner la configuración en el csprojarchivo para que no se pierda. Desafortunadamente, Visual Studio no le permite hacer esto automáticamente, por lo que debe agregar la configuración manualmente. Afortunadamente, la configuración es la misma para cualquier proyecto.

Haga clic derecho y descargue el proyecto, luego haga clic derecho nuevamente y edite el csprojarchivo del proyecto. En el XML, agregue lo siguiente al primero PropertyGroup, por ejemplo, justo después TargetFramework.

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

Esto tiene las siguientes ventajas;

  • Lo configura para depurar y lanzar
  • Ejecuta cualquier versión de Visual Studio que esté ejecutando actualmente.
  • Está registrado en el control de código fuente, por lo que todos los desarrolladores no tienen que recordar cómo hacerlo :)

Como indica @MBulli en los comentarios, si ha realizado los cambios en la respuesta aceptada, elimine su *.csproj.userarchivo porque la configuración anulará las que agregó al csprojarchivo principal .

Rob Prouse
fuente
6
Asegúrese de eliminar el archivo * .csproj.user porque la configuración del usuario tiene prioridad sobre la configuración del proyecto.
MBulli
Gran respuesta, gracias! Mucho más eficiente que el aceptado.
Zverev Evgeniy
Funcionó perfectamente para vs 2019
x0n
2

El método OutputWindowHelper.OutputString escribe en el panel de la ventana de salida 'General' (Ctrl Alt o). Agregué esta línea en mis referencias .csproj para obtener esto en VS 2013

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

También vea esta respuesta .

tcb
fuente
Nota OutputWindowHelper no existe en Visual Studio 2015. Una máquina con solo VS2015 arrojará un error si se llama. Ver también github.com/landofjoe/NuspecPackager/issues/1
Quango
0

Si intenta depurar una UnitTestExtension, también debe adjuntar el depurador a los procesos vstest. *. Exe como se describe aquí . De lo contrario, es posible que vea el punto de interrupción de activación, pero el depurador nunca lo alcanzará.

smkanadl
fuente