Mam kilka narzędzi, które wykonują aktualizacje rozwiązań .NET, ale muszą znać katalog, w którym znajduje się rozwiązanie.Programowe pobieranie bieżącego katalogu rozwiązania IDE Visual Studio z dodatków
Dodałem te narzędzia jako Narzędzia zewnętrzne, gdzie pojawiają się one w menu Narzędzia IDE i dostarczają $(SolutionDir)
jako argument. To działa dobrze.
Jednak chcę, aby te narzędzia były łatwiej dostępne w IDE dla użytkownika poprzez niestandardowe menu najwyższego poziomu (dla którego stworzyłem projekt pakietu integracji Visual Studio) oraz poprzez menu kontekstowe na węzłach rozwiązania (dla których Stworzyłem projekt dodatku Visual Studio). Szukam sposobu, aby uzyskać bieżący katalog rozwiązania przez te konteksty.
próbowałem uzyskiwanie informacji rozwiązanie z obiektu VisualStudio.DTE
:
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
Ale to zwraca katalog rozwiązanie dla ins dodawać, a nie obecnego rozwiązania.
Próbowałem echo $(SolutionDir)
i czytając 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 ten powrócił do katalogu dla IDE, a nie obecne rozwiązanie.
Nie widziałem żadnych istotnych informacji w węźle rozwiązania CommandBar
.
Alternatywnie, jeśli byłby sposób na programowy dostęp do zdefiniowanych narzędzi zewnętrznych Visual Studio i ich uruchomienie (przy użyciu już zdefiniowanych argumentów makra), to by działało.
Jakie jest rozwiązanie?
2+ ponownie widocznie jestem stalking cię tutaj z tego DTE szaleństwa lol – Terrance