2012-02-14 27 views
73

Estoy escribiendo una extensión VSIX para Visual Studio 2010 y no puedo encontrar la manera de depurarlo.Cómo depurar extensiones de Visual Studio

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

Respuesta

144

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. Pruebe lo siguiente

  • clic derecho en el proyecto y seleccione Propiedades
  • Ir a la depuración Tab

Haga clic en el botón de radio para Start External Program. Apúntalo al binario devenv.exe. En mi máquina se encuentra en

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

en una máquina que no x64, aunque se puede quitar el " (x86) "porción.

Luego configure 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. Por defecto, las extensiones VSIX cuando se compilan se registrarán en la colmena experimental.

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

+0

gracias por esta respuesta, se resolvió un problema de una vez. ¡Muy agradecido! –

+0

@JaredPar - ¿hay alguna manera de decirle a la extensión vs2012 que se registre en la colmena experimental de la vista previa de vs2015? –

+0

Hice esto en VS2015 y funcionó. – matthewpavkov

2

El método OutputWindowHelper.OutputString escribe en el panel de la ventana de salida 'General' (Ctrl Alt o). He añadido esta línea en mis referencias Csproj para conseguir esto en VS 2013

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

Véase también this answer.

+0

Nota OutputWindowHelper no existe en Visual Studio 2015. Una máquina con solo VS2015 lanzará un error si se invoca. Consulte también https://github.com/landofjoe/NuspecPackager/issues/1 – Quango

38

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

Una mejor opción es poner la configuración en el archivo csproj para que no se pierda. Desafortunadamente, Visual Studio no le permite hacer esto automáticamente, por lo que debe agregar manualmente la configuración. 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 archivo de proyecto csproj. En XML, agregue lo siguiente al primer PropertyGroup, por ejemplo, inmediatamente después de TargetFramework.

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

Esto tiene las siguientes ventajas;

  • Se establece que para depurar y liberar
  • Se ejecuta cualquier versión de Visual Studio está ejecutando actualmente
  • se comprueba en control de código fuente, por lo que cada desarrollador no tiene que recordar cómo hacerlo it :)

Como @MBulli estados en los comentarios, si se han realizado los cambios en la respuesta aceptada, borrar el archivo de *.csproj.user porque la configuración en que harán caso omiso de los que se agregaron al archivo principal csproj.

+3

Asegúrese de eliminar el archivo * .csproj.user porque la configuración del usuario tiene prioridad sobre la configuración del proyecto. – MBulli

+0

¡Gran respuesta, gracias! Mucho más eficiente que el aceptado. –

0

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

Cuestiones relacionadas