Как получить текущую директорию решений из 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

И некоторые хорошие руководства по msdn на VSPackages, такие как: http://msdn.microsoft.com/en-us/library/cc138589.aspx

Я еще не нашел хорошую ссылку (на msdn или иначе) о том, как интерфейсы более высокого уровня в надстройках (например, DTE) отображаются на интерфейсы более низкого уровня в VSPackages.

Любые хорошие ссылки там, чтобы помочь с общим отображением от интерфейсов надстройки к интерфейсам VSPackage?

Ответ 1

Я нашел ответ на конкретный вопрос. Объект 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);

Ответ 2

Вы можете получить объект 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 и Solution путь из свойства DTE.Solution.Path.

Ответ 3

При использовании интерфейса IVsSolution вы можете использовать GetSolutionInfo, чтобы получить путь к решению, имя файла решения и имя файла параметров пользователя (SUO) решения:

this.solution.GetSolutionInfo(
    out string solutionDirectory,
    out string solutionFile,
    out string userOptsFile);