0

Когда решение программно открыто в надстройке/расширении (VS2012 в моем случае) с использованием Solution.Open, файл решения не добавляется к проектам MRU (например, File-> Recent Projects and Solutions), как это было бы, если бы вы открыли решение, используя меню File-> Open-> Project/Solution. Есть ли способ принудительно добавить файл? Я видел некоторые ссылки на управление реестром (например, HKCU \ Software \ Microsoft \ VisualStudio \ 11.0 \ ProjectMRUList), но есть ли другой способ, который не предполагает хранение, которое использует VS, и, следовательно, будет менее вероятно, будущее? Возможно, интерфейс VS, который может позаботиться об этом, независимо от того, где информация может быть сохранена. Это также позволило бы мне игнорировать то, что максимальное количество элементов, избегая ошибок при обновлении/повторной нумерации существующих элементов и т. Д. Я нашел IVsMRUItemsStore, но если это то, что я должен использовать, я не уверен, что categoryGuid Я бы использовал. Из того, что я видел, похоже, что этот интерфейс может быть связан со встроенной функцией поиска.Как вы можете добавить файл в список недавних проектов MRU при программном открытии решения в VS?

[Редактировать] Хорошо, я сделал еще несколько копаний. Во-первых, IVsMRUItemsStore кажется, не связанный с проектом mru list, поскольку Microsoft.VisualStudio.PlatformUI.MRUItemsStoreService кажется пустым даже после отображения меню последних проектов. Во-вторых, я попытался напрямую манипулировать реестром, но это не сработает, потому что VS не знает об изменении реестра, поэтому меню и его внутренний кеш остаются неизменными. Если впоследствии вы откроете другой проект или решение в диалоговом окне Open Project, реестр будет перезаписан кэшированной информацией, а проект/решение будет открыто через диалог. Я был бы в порядке с манипулированием реестром, если бы какой-то способ уведомить VS о перечитании информации о реестре (без закрытия VS). Я также был бы рад, если бы был какой-то другой программный способ манипулирования списком последних проектов через объектную модель VS.

[Редактировать 2] Я обнаружил, что элемент меню «Вид» в «Источнике контроля источника TFS» делает именно то, что я хочу. Он откроет данное решение, предлагая преобразовать решение (без закрытия открытых документов) и добавляет элемент в MRU. Вопрос в том, как я могу сделать то же самое в своем расширении/добавлении? Я не могу использовать их команду (если она не принимает параметр), потому что решение/проект, который я открываю, не находится в TFS.

ответ

2

Контроллер контроля источника TFS просто вызывает IVsSolution.OpenSolutionFile, что добавляет решение к последним спискам файлов. Я подозреваю, что все, что вам нужно сделать, это просто использовать это вместо метода EnvDTE, и вам будет хорошо идти.

+0

Спасибо за ответ. Я фактически использую EnvDTE, потому что он не закрывает открытые документы (например, если у меня есть рабочий элемент или список запросов workitem). Когда я использую OpenSolutionFile (который мне нужен, если я хочу, чтобы VS конвертировал решение), он закрывает открытые файлы. Интересно, что если я открою решение из исходного элемента управления, эти окна не закрываются. Вы случайно не знаете, какие флаги использует диспетчер управления версиями с OpenSolutionFile или что-то еще, что может повлиять на это? – AndrewS

+0

На данный момент мне пришлось взломать его, заменив/установив viewhelper документов, которые я хочу открыть, с моей собственной реализацией IVsWindowFrameNotify3 и прервать закрытие, но я не доволен им, если есть еще несколько флагов или другой способ пожалуйста, дайте мне знать. Thx – AndrewS

+0

Удаление точки останова на OpenSolutionFile, похоже, что TFS передает SLNOPENOPT_AddToCurrent, но я точно не знаю, что такое элементы управления. Существует также некоторая логика, которую я не понимаю, контролируя, когда это происходит или не передает ее. Код не совсем понятен. :-( –

 Смежные вопросы

  • Нет связанных вопросов^_^