Search code examples
visual-studiovisual-studio-2019visual-studio-extensions

Why recent project and solution pinned always is false?


I'm writing a extension package for VS 2019, So far i find out how to get "Recent projects and solutions" items, These items have a PropertyInfo called "Pinned" which means that project or solution is pinned, Except it's always false.

Here is the code which i get project list and show it to user :

 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);

Anyone tried to do something like this before? Or this is a bug and i should report it to microsoft?

If you want to test this code just create a new command and put this code in "Execute" void.


Solution

  • Anyone tried to do something like this before? Or this is a bug and i should report it to microsoft?

    Based on your description, when I try your code and when I debug this project, create a new project in solution explorer, I faced the same issue as you said: the value of blnPinned is always false though the project is pinned.

    enter image description here

    So l have reported this issue on our DC Forum for you. See this link which I hope anyone who is interested in this issue will vote for you.

    You can vote on this issue and add any comment if I forgot some detailed info to attract more attention. With this further step, I hope the staff will give a satisfactory feedback.