Почему недавний проект и решение всегда ложны? - PullRequest
0 голосов
/ 21 марта 2020

Я пишу пакет расширения для VS 2019. До сих пор я узнаю, как получить элементы «Недавние проекты и решения». Эти элементы имеют свойство PropertyInfo, называемое «Прикреплено», что означает, что проект или решение закреплены, за исключением того, что всегда false.

Вот код, который я получаю в списке проектов и показываю его пользователю:

 IVsDataSourceFactory objFactory = serviceProvider.GetService(typeof(SVsDataSourceFactory)) as IVsDataSourceFactory;
            objFactory.GetDataSource(new Guid("9099ad98-3136-4aca-a9ac-7eeeaee51dca"), 1, out IVsUIDataSource dataSource);
            Type typProjectMruList = Type.GetType("Microsoft.VisualStudio.PlatformUI.ProjectMruList, Microsoft.VisualStudio.Shell.UI.Internal", true);
            System.Reflection.PropertyInfo itemsProperty = typProjectMruList.GetProperty("Items");
            Type typFileSystemMruItem = Type.GetType("Microsoft.VisualStudio.PlatformUI.FileSystemMruItem, Microsoft.VisualStudio.Shell.UI.Internal", true);
            System.Reflection.PropertyInfo pathProperty = typFileSystemMruItem.GetProperty("Path");
            System.Reflection.PropertyInfo pinnedProperty = typFileSystemMruItem.GetProperty("Pinned");
            IList lstItems = (IList)itemsProperty.GetValue(dataSource, null);
            string strMsg = "";
            for (var i = lstItems.Count - 1; i > -1; i--)
            {
                string strPath = (string)pathProperty.GetValue(lstItems[i], null);
                bool blnPinned = (bool)pinnedProperty.GetValue(lstItems[i], null);
                strMsg = strMsg + "Path : " + strPath + Environment.NewLine + "Pinned : " + blnPinned.ToString() + Environment.NewLine + Environment.NewLine;
            }
            // Show a message box to prove we were here
            VsShellUtilities.ShowMessageBox(
                package,
                strMsg,
                "",
                OLEMSGICON.OLEMSGICON_INFO,
                OLEMSGBUTTON.OLEMSGBUTTON_OK,
                OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);

Кто-нибудь пытался сделать что-то подобное раньше? Или это ошибка, и я должен сообщить об этом в Microsoft?

Если вы хотите проверить этот код, просто создайте новую команду и поместите этот код в «Выполнить» void.

1 Ответ

1 голос
/ 24 марта 2020

Кто-нибудь пытался сделать что-то подобное раньше? Или это ошибка, и я должен сообщить об этом в Microsoft?

На основании вашего описания, когда я пробую ваш код и когда я отлаживаю этот проект, создаю новый проект в обозревателе решений, я столкнулся с та же проблема, что вы сказали: значение blnPinned всегда ложно, хотя проект закреплен.

enter image description here

Итак, я сообщил об этой проблеме на нашем D C Форум для вас. См. эту ссылку , которую, я надеюсь, любой, кто интересуется этим вопросом, проголосует за вас.

Вы можете проголосовать по этому вопросу и добавить любой комментарий, если я забыл некоторую подробную информацию, чтобы привлечь больше внимания. , Надеюсь, что с этим дальнейшим шагом персонал даст удовлетворительную обратную связь.

...