Я кодирую некоторый код времени разработки. Я хочу использовать этот фрагмент кода: (Найдено here)Получение текущего EnvDTE или IServiceProvider, когда НЕ кодируется Addin
var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
var solution = dte.Solution;
if (solution != null)
{
string baseDir = Path.GetDirectoryName(solution.FullName);
}
}
Проблема заключается в том, что это не компилируется. (GetService не является известным вызовом метода) Я попробовал добавить Microsoft.VisualStudio.Shell (и Microsoft.VisualStudio.Shell.10.0), но это не помогло.
Осмотревшись в интернете, я обнаружил, что для этого нужен IServiceProvider.
Но все примеры, показывающие, как получить IServiceProvider, используют EnvDTE.
Итак, для получения текущего EnvDTE мне нужен IServiceProvider. Но для получения IServiceProvider мне нужен EnvDTE. (Существует отверстие в моем ведре ...)
Итак, вот мой вопрос:
В обычном приложении WPF, как я могу получить текущий экземпляр из EnvDTE?
ПРИМЕЧАНИЕ: Я не ищу какой-либо старый экземпляр EnvDTE. Мне нужен один для моего текущего экземпляра Visual Studio (я бегу 3-4 экземпляров Visual Studio в то время.)
Ваш WPF код здесь отдельный процесс полностью, или WPF код все еще работает внутри Визуальный Студия через какой-то другой механизм? –
@jason - Просто нормальное приложение wpf. Я планирую запустить его во время разработки. Но я был бы доволен примером, который работал бы во время выполнения (например, в событии OnClick). (Создайте новое приложение wpf, перетащите кнопку в окне и дважды щелкните по нему). – Vaccano
Вам нужно вызвать GetActiveObject с надлежащим прозвищем к экземпляру VS, который вы хотите. Является ли эта информация необходимой вам: http://msdn.microsoft.com/en-us/library/ms228755.aspx? –