30

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

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

您将如何通过 VSPackage 执行此操作?

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

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

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

我还没有找到很好的参考资料(在 msdn 或其他方面)关于加载项(例如 DTE)中的更高级别接口如何映射到 VSPackages 中的更低级别接口。

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

4

3 回答 3

30

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

// 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);
于 2010-02-26T00:50:37.310 回答
10

您可以从以下函数之一获取 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);
}

之后,您可以从属性中获取Solution活动和DTE.Solution路径 SolutionDTE.Solution.Path

于 2011-01-06T08:40:34.540 回答
2

如果使用该IVsSolution接口,您可以使用GetSolutionInfo获取解决方案的路径、解决方案文件名和解决方案用户选项 (SUO) 文件名:

this.solution.GetSolutionInfo(
    out string solutionDirectory,
    out string solutionFile,
    out string userOptsFile);
于 2019-07-29T21:59:05.330 回答