Quantcast
Channel: Visual Studio Integrate forum
Viewing all articles
Browse latest Browse all 4410

Programmatically getting the current Visual Studio IDE solution directory from addins

$
0
0

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?


Viewing all articles
Browse latest Browse all 4410

Trending Articles