如何从VSPackage获取当前解决方案目录?

以下是如何从加载项获取当前解决方案目录:

_applicationObject = (DTE2)application; // retrieved from OnConnection method string solutionDir = System.IO.Path.GetDirectoryName(_applicationObject.Solution.FullName); 

你会如何通过VSPackage做到这一点?

我正在将可视工作室加载项迁移到VSPackage,因为我打算添加一些需要与IDE进行更深入集成的用户控件。

我发现了一些关于加载项与集成包的相对优点的一些很好的参考,例如: http : //nayyeri.net/visual-studio-addin-vs-integration-package-part-1

以及关于VSPackages上msdn的一些很好的教程,例如: http : //msdn.microsoft.com/en-us/library/cc138589.aspx

我还没有找到关于加载项(例如DTE)中的更高级接口如何映射到VSPackage中的低级接口的良好引用(在msdn或其他方面)。

有什么好的参考资料可以帮助实现从附加接口到VSPackage接口的一般映射?

我找到了具体问题的答案。 可以通过GetService()方法检索VisualStudio.DTE对象,如下所示:

 // Get an instance of the currently running Visual Studio IDE DTE dte = (DTE)GetService(typeof(DTE)); string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName); 

您可以从以下function之一获取DTE对象:

 public static DTE GetCurrentDTE(IServiceProvider provider) { /*ENVDTE. */DTE vs = (DTE)provider.GetService(typeof(DTE)); if (vs == null) throw new InvalidOperationException("DTE not found."); return vs; } public static DTE GetCurrentDTE() { return GetCurrentDTE(/* Microsoft.VisualStudio.Shell. */ServiceProvider.GlobalProvider); } 

之后,您可以从DTE.Solution.Path属性获得DTE.SolutionSolution路径的活动Solution Solution