Obtendo o atual EnvDTE ou IServiceProvider quando não está codificando um suplemento

Estou codificando um código de tempo de design. Eu quero usar este trecho: (EncontradoAqui)

var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
    var solution = dte.Solution;
    if (solution != null)
    {
        string baseDir = Path.GetDirectoryName(solution.FullName);
    }
}

O problema é que isso não compila. (GetService não é uma chamada de método conhecida) Eu tentei adicionar Microsoft.VisualStudio.Shell (e Microsoft.VisualStudio.Shell.10.0), mas isso não ajudou.

Ao olhar pela internet, descobri que você precisa de um IServiceProvider para chamar isso.

Mas todos os exemplos que mostram como obter um IServiceProvider usam um EnvDTE.

Portanto, para obter o EnvDTE atual, preciso de IServiceProvider. Mas, para obter um IServiceProvider, preciso de um EnvDTE. (Há um buraco no meu balde ...)

Então aqui está a minha pergunta:

Em um aplicativo WPF normal, como posso obterinstância atual de EnvDTE?

NOTA: Eu não estou procurando por qualquer instância antiga do EnvDTE. Eu preciso de um para a minha instância atual do Visual Studio (eu corro 3-4 instâncias do Visual Studio por vez.)

questionAnswers(5)

yourAnswerToTheQuestion