У меня есть инструменты, которые обновляют решения .NET, но им нужно знать каталог, в котором находится решение.
Я добавил эти инструменты как внешние инструменты, где они появляются в меню «Инструменты IDE», и указал $(SolutionDir)
в качестве аргумента. Это прекрасно работает.
Однако я хочу, чтобы к этим инструментам было проще получить доступ в среде IDE для пользователя через настраиваемое меню верхнего уровня (для которого я создал проект пакета интеграции Visual Studio) и через контекстное меню на узлах решения (для которого я создал Visual Проект надстройки Studio). Я ищу способ получить текущий каталог решения через эти контексты.
Я попытался получить информацию о решении из объекта VisualStudio.DTE
:
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
Но это возвращает каталог решения для надстроек, а не текущее решение.
Я попытался повторить $(SolutionDir)
и перечитать его:
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();
Но это вернуло каталог для IDE, а не текущее решение.
Я не нашел соответствующей информации в узле решения CommandBar
.
В качестве альтернативы, если бы существовал способ программного доступа к определенным внешним инструментам Visual Studio и их запуска (с использованием уже определенных аргументов макроса), это сработало бы.
Каково решение?