Link to related post in Stack Overflow (just added this question as a reference):
Programmatically getting the current Visual Studio IDE solution directory from addins
I have some tools that perform updates on .NET solutions, but they need to know the directory where the solution is located.
I added these tools as External Tools, where they appear in the IDE Tools menu, and supplying$(SolutionDir) as
an argument. This works fine.
However, I want these tools to be easier to access in the IDE for the user through a custom top level menu (for which I created a Visual Studio integration package project) and through a context menu on solution nodes (for which I created a Visual Studio add-in project). I'm looking for a way to get the current solution directory through these contexts.
I tried getting the solution information from the VisualStudio.DTE object:
EnvDTE.DTE dte =(EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");string solutionDir =System.IO.Path.GetDirectoryName(dte.Solution.FullName);But, this returns the solution directory for the add ins, not the current solution.
I tried echoing $(SolutionDir) and
reading it back:
System.Diagnostics.ProcessStartInfo procStartInfo =newSystem.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 itSystem.Diagnostics.Process proc =newSystem.Diagnostics.Process();
proc.StartInfo= procStartInfo;
proc.Start();// Get the output into a stringstring result = proc.StandardOutput.ReadToEnd();But, this returned the directory for the IDE, not the current solution.
I didn't see any relevant information in the solution node CommandBar.
Alternatively, if there was a way to programmatically access the defined Visual Studio external tools and launch them (using the already defined macro arguments), that would work.
What is the solution?