VSPackage: Как получить выбранный файл, когда не открыто «реальное» решение - PullRequest
2 голосов
/ 31 декабря 2010

Я разрабатываю VSPackage на C #, и я хотел бы знать, как получить текущий файл, когда только один файл (или несколько файлов открываются в Visual Studio).

Все отлично работает при наличии иерархии (открыто real решение). Но когда я открываю один файл в Visual Studio, я не могу получить текущий выбор. Я имею в виду открыть Visual Studio (без решения) и select File -> Open -> File.

Мне нужно получить один из них: itemid, documentCookie, mkDocumentName или любой другой.

Я попробовал следующее:

  • IVsMonitorSelection.GetCurrentSelection() -> Всегда получает идентификатор элемента решения без иерархии (Intpr.Zero)
  • IVsSelectionEvents -> Я пытался прослушать событие выбора, новый itemId всегда является решением itemid
  • RunningDocumentTable -> Ну, я близок, чтобы найти решение, потому что я могу перечислить открытые файлы, но я не уверен, как определить, какой из них является текущим.

1 Ответ

5 голосов
/ 31 декабря 2010

Это звучит как то, что DTE может решить для вас.Вы проверили DTE2.ActiveDocument (полученный путем запроса SDTE)?

var dte = (DTE2)GetService(typeof(SDTE));
var doc = dte.ActiveDocument;
// Check doc.Name, doc.Path, doc.FullName
...