我有一些对 .NET 解决方案执行更新的工具,但他们需要知道解决方案所在的目录。
我将这些工具添加为外部工具,它们出现在 IDE 工具菜单中,并$(SolutionDir)
作为参数提供。这工作正常。
但是,我希望通过自定义顶级菜单(为此我创建了一个 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 外部工具并启动它们(使用已定义的宏参数),那将起作用。
解决办法是什么?