Programowe pobieranie bieżącego katalogu rozwiązań Visual Studio IDE z dodatków

Mam kilka narzędzi, które wykonują aktualizacje rozwiązań .NET, ale muszą znać katalog, w którym znajduje się to rozwiązanie.

Dodałem te narzędzia jako Narzędzia zewnętrzne, gdzie pojawiają się w menu Narzędzia IDE i dostarczają$(SolutionDir) jako argument. To działa dobrze.

Chcę jednak, aby te narzędzia były łatwiej dostępne w środowisku IDE dla użytkownika za pomocą niestandardowego menu najwyższego poziomu (dla którego stworzyłem projekt pakietu integracyjnego Visual Studio) oraz poprzez menu kontekstowe na węzłach rozwiązań (dla których stworzyłem program Visual Projekt dodatku Studio). Szukam sposobu, aby uzyskać bieżący katalog rozwiązań przez te konteksty.

Próbowałem uzyskać informacje o rozwiązaniu odVisualStudio.DTE obiekt:

EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);

Zwraca to jednak katalog rozwiązań dla dodatków, a nie bieżące rozwiązanie.

Próbowałem echo$(SolutionDir) i czytanie go z powrotem:

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();

Ale to zwróciło katalog IDE, a nie obecne rozwiązanie.

Nie widziałem żadnych istotnych informacji w węźle rozwiązaniaCommandBar.

Ewentualnie, jeśli istnieje sposób na programowy dostęp do zdefiniowanych zewnętrznych narzędzi Visual Studio i uruchomienie ich (przy użyciu już zdefiniowanych argumentów makr), to zadziała.

Jakie jest rozwiązanie?

questionAnswers(2)

yourAnswerToTheQuestion