Pobieranie bieżącego EnvDTE lub IServiceProvider, gdy NIE koduje Addin

Koduję jakiś kod czasu projektowania. Chcę użyć tego fragmentu: (Znalezionotutaj)

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

Problem polega na tym, że to się nie kompiluje. (GetService nie jest znanym wywołaniem metody) Próbowałem dodać Microsoft.VisualStudio.Shell (i Microsoft.VisualStudio.Shell.10.0), ale to nie pomogło.

Rozglądając się w internecie, odkryłem, że potrzebujesz połączenia IServiceProvider.

Ale wszystkie przykłady, które pokazują, jak uzyskać dostawcę IService, używają EnvDTE.

Aby uzyskać aktualny EnvDTE, potrzebuję dostawcy IServiceProvider. Ale aby zdobyć dostawcę IService, potrzebuję EnvDTE. (W moim wiadrze jest dziura ...)

Oto moje pytanie:

W normalnej aplikacji WPF, jak mogę uzyskaćbieżąca instancja EnvDTE?

UWAGA: Nie szukam żadnego starego wystąpienia EnvDTE. Potrzebuję tego dla mojej obecnej instancji Visual Studio (uruchamiam 3-4 instancje Visual Studio naraz.)

questionAnswers(5)

yourAnswerToTheQuestion