为什么固定的最近项目和解决方案总是错误的?
Why recent project and solution pinned always is false?
我正在为 VS 2019 编写一个扩展包,到目前为止我找到了如何获取 "Recent projects and solutions" 项目,这些项目有一个名为 "Pinned" 的 PropertyInfo,这意味着项目或解决方案已固定, 除了它总是假的。
这是我获取项目列表并将其显示给用户的代码:
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 报告它?
如果您想测试此代码,只需创建一个新命令并将此代码放入 "Execute" void。
Anyone tried to do something like this before? Or this is a bug and i
should report it to microsoft?
根据您的描述,当我尝试您的代码并调试此项目时,在解决方案资源管理器中创建一个新项目时,我遇到了与您所说的相同的问题:blnPinned
的值始终为 false尽管项目已固定。
所以我已经在我们的 DC 论坛上为您报告了这个问题。看到this link希望对这个问题感兴趣的人给你投票
如果我忘记了一些详细信息,您可以对此问题进行投票并添加任何评论以引起更多关注。有了这一步,希望工作人员能给个满意的反馈。
我正在为 VS 2019 编写一个扩展包,到目前为止我找到了如何获取 "Recent projects and solutions" 项目,这些项目有一个名为 "Pinned" 的 PropertyInfo,这意味着项目或解决方案已固定, 除了它总是假的。
这是我获取项目列表并将其显示给用户的代码:
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 报告它?
如果您想测试此代码,只需创建一个新命令并将此代码放入 "Execute" void。
Anyone tried to do something like this before? Or this is a bug and i should report it to microsoft?
根据您的描述,当我尝试您的代码并调试此项目时,在解决方案资源管理器中创建一个新项目时,我遇到了与您所说的相同的问题:blnPinned
的值始终为 false尽管项目已固定。
所以我已经在我们的 DC 论坛上为您报告了这个问题。看到this link希望对这个问题感兴趣的人给你投票
如果我忘记了一些详细信息,您可以对此问题进行投票并添加任何评论以引起更多关注。有了这一步,希望工作人员能给个满意的反馈。