Tengo un paquete de Visual Studio que hace algo de su trabajo iniciando un proceso externo (usando System.Diagnostics.Process
) y comunicándose con él por entrada/salida estándar. Actualmente, tengo la ruta al .exe
codificada, que obviamente no es factible para implementar realmente la extensión. ¿Cuál es la forma correcta de empaquetar y distribuir el .exe
con la extensión? (Y, relacionado, una vez que lo he hecho, cómo descubro la ruta al archivo .exe
por medio de la instalación. Preferiblemente me gustaría ponerlo en el archivo .vsix
para que la instalación sea fácil.Paquete .exe en .vsix y llamada desde la extensión de Visual Studio
EDIT: He colocado la parte pertinente de mi código en BitBucket (puede ser útil a otra persona usando Roslyn): roslyn_process con el fin de dar una mejor idea de lo que estoy tratando de hacer. Este código establece la comunicación entre una extensión de Visual Studio utilizando una implementación de AbstractProcessHandler
y un proceso por separado usando RoslynProcess
. Este último se mantiene informado de las modificaciones a los archivos de código en Visual Studio y qué archivo de código se está viendo, por lo que es capaz de hacer análisis con información actualizada a pesar de no ejecutarse como una extensión de Visual Studio que impondría las limitaciones de Roslyn en todo el código que se está editando.
EDIT 2: Utilizando this answer, puedo obtener el directorio de la extensión. Puedo incluir otro paquete en source.extension.vsixmanifest
agregándolo a la lista de contenido como tipo "Tipo de extensión personalizada". Luego, el .exe
aparece en el directorio de la extensión. Parece que esta es probablemente la solución correcta, aunque la forma de obtener el directorio está etiquetada en MSDN como algo que no debería usar.
Parece que esta podría ser la mejor manera de hacerlo, aunque parezca un hack, en cuyo caso lo publicaré como respuesta una vez que todo esté funcionando.
@Kiquenet: Lo siento, no tengo una solución mínima perfectamente empaquetada ... pero la respuesta aceptada es de una sola línea. – perelman