Как вы получаете текущий каталог решений из VSPackage? - PullRequest
26 голосов
/ 25 февраля 2010

Ниже показано, как вы можете получить текущий каталог решений из надстройки:

_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

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

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

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

Ответы [ 2 ]

27 голосов
/ 26 февраля 2010

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

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

...