0

当使用 Solution.Open 在加载项/扩展(在我的情况下为 VS2012)中以编程方式打开解决方案时,解决方案文件不会添加到项目 MRU(即 File->Recent Projects and Solutions 菜单)中,如果您使用 File->Open->Project/Solution 菜单打开了解决方案。有没有办法强制添加文件?我看过一些关于操作注册表的参考资料(例如HKCU\Software\Microsoft\VisualStudio\11.0\ProjectMRUList) 但是是否有另一种方法不假设 VS 使用的存储,因此将来不太可能中断?也许一个 VS 接口可以处理它,而不管信息可能存储在哪里。这也将允许我忽略 mru 项目的最大 #,避免更新/重新编号现有项目等错误。我找到了IVsMRUItemsStore但如果那是我应该使用的,我不确定我会使用什么categoryGuid正在使用。从我所看到的看来,这个界面可能与内置的搜索功能有关。

[编辑]好的,我做了更多的挖掘。首先,IVsMRUItemsStore似乎与项目 mru 列表无关,因为即使在显示最近的项目菜单之后,Microsoft.VisualStudio.PlatformUI.MRUItemsStoreService 似乎也是空的。其次,我尝试直接操作注册表,但效果不佳,因为 VS 不知道注册表更改,因此菜单及其内部缓存保持不变。如果您随后使用“打开项目”对话框打开另一个项目或解决方案,则注册表将被缓存信息以及通过该对话框打开的项目/解决方案覆盖。如果有某种方法可以通知 VS 重新读取注册表信息(不关闭 VS),我可以操作注册表。如果有其他编程方式通过 VS 的对象模型来操作最近的项目列表,我也会很高兴。

[ Edit2 ] 我发现 TFS 的源代码管理资源管理器中的 View 菜单项正是我想要的。它将打开给定的解决方案,提示是否需要转换解决方案(不关闭打开的文档)并将项目添加到 MRU。现在的问题是我如何在我的扩展/插件中做同样的事情?我不能使用他们的命令(除非它需要一个参数),因为我打开的解决方案/项目不在 TFS 中。

4

1 回答 1

3

TFS 源代码控制资源管理器只是调用IVsSolution.OpenSolutionFile,它将解决方案添加到最近的文件列表中。我怀疑你所要做的就是使用它而不是 EnvDTE 方法,你会很高兴的。

于 2013-05-16T03:51:08.963 回答