Tengo algunas herramientas que realizan actualizaciones en soluciones .NET, pero necesitan saber el directorio donde se encuentra la solución.Programando obtener el directorio actual de la solución IDE de Visual Studio desde complementos
Agregué estas herramientas como Herramientas Externas, donde aparecen en el menú Herramientas IDE, y suministrando $(SolutionDir)
como argumento. Esto funciona bien
Sin embargo, quiero que estas herramientas sean más fáciles de acceder en el IDE para el usuario a través de un menú personalizado de nivel superior (para el cual creé un proyecto de paquete de integración Visual Studio) y un menú contextual en nodos de solución (para los cuales Creé un proyecto de complemento de Visual Studio). Estoy buscando una manera de obtener el directorio de soluciones actual a través de estos contextos.
He intentado obtener la información solución del objeto VisualStudio.DTE
:
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
embargo, este resultado el directorio solución para las ins agregar, no la solución actual.
me trataron eco $(SolutionDir)
y leer de nuevo:
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "echo $(SolutionDir)");
// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
// Now we create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
string result = proc.StandardOutput.ReadToEnd();
Pero, esto devolverá el directorio para el IDE, no la solución actual.
No vi ninguna información relevante en el nodo de solución CommandBar
.
Alternativamente, si hubiera una forma de acceder mediante programación a las herramientas externas de Visual Studio definidas y ejecutarlas (utilizando los argumentos de macro ya definidos), eso funcionaría.
¿Cuál es la solución?
2+ nuevo parecer que estoy acechando aquí con esta locura DTE lol – Terrance