如何获取visual studio中打开的当前解决方案的路径?

How to fetch the path of current solution opened in visual studio?

我创建了一个工具 window 作为 VSIX 项目的一部分,并安装了一个扩展来测试它。因此,工具 window 需要访问在 visual studio 中打开的当前 solution/project。当用户第一次创建项目时,我们可以使用 DTE 对象获取路径,如下所述,我试过了,效果很好,

How can an add-in detect when a solution is loaded?

但是下次如何在用户双击解决方案时获取当前解决方案路径?现在,当用户打开 .sln 文件时,工具 window 中断,因为它无法找到打开的解决方案路径。

当用户双击并打开解决方案时,我们手头没有 DTE 对象,我们需要一种不同的方法来获取 solutionInfo。我使用 IVsSolution.GetSolutionInfo

让它工作
IVsSolution solution = (IVsSolution) Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(IVsSolution));
solution.GetSolutionInfo(out string solutionDirectory, out string solutionName, out string solutionDirectory2);
var solutionPath = solutionDirectory + System.IO.Path.GetFileNameWithoutExtension(solutionName);