Как обновить (активировать) конкретный документ в VS?

Я пишу небольшое расширение Visual Studio для VS2017 на С# и пытаюсь сделать что-то довольно простое: если я нажму кнопку, я хочу повторно открыть (сделать активным) определенный документ.

У меня есть RunningDocumentInfo из RunningDocumentTable для этого документа, поэтому у меня есть его прозвище, иерархия и все такое прочее. В документах SDK я нашел только то, что обновление можно выполнить с помощью IVsUIShellOpenDocument.IsDocumentOpen и флага IDO_ActivateIfOpen. Это звучит немного неуместно, так как я уже точно знаю, что документ открыт, но я бы согласился, если он работает. Но как получить подходящий экземпляр, реализующий IVsUIShellOpenDocument? Или есть, случайно, более простой способ, которого я просто не нашел?


person Svensational    schedule 17.08.2019    source источник
comment
См. stackoverflow.com/questions/39414944/   -  person Sergey Vlasov    schedule 18.08.2019
comment
Спасибо за ссылку, это действительно сработало: EnvDTE.DTE dte; dte = (EnvDTE.DTE)Package.GetGlobalService( typeof( EnvDTE.DTE ) ); dte.ItemOperations.OpenFile( info.Moniker ); Все еще странно открывать документ, который, как вы знаете, уже открыт, поэтому, если есть более простой способ просто активировать его, я был бы более чем счастлив, но пока он работает трюк я счастлив ^^   -  person Svensational    schedule 18.08.2019


Ответы (1)


Я нашел способ, который я теперь принимаю в качестве решения:

foreach (Document doc in dte2.Documents)
{
    if (doc.FullName == Moniker)
    {
        doc.Activate();
        return;
    }
}

Это просматривает открытые в данный момент документы, пока не найдет тот, который я хочу активировать, и активирует его, как я и хотел :)

person Svensational    schedule 17.10.2019