使用Solution.Open以加载项/扩展名(在我的案例中为VS2012)以编程方式打开解决方案时,解决方案文件不会添加到项目MRU中(即文件 - >最近项目和解决方案菜单)如果你使用File-> Open-> Project / Solution菜单打开解决方案就好了。有没有办法强制添加文件?我已经看到了一些操作注册表的引用(例如 HKCU \ Software \ Microsoft \ VisualStudio \ 11.0 \ ProjectMRUList )但是有另一种方式不假设VS使用的存储因此将来不太可能破产?也许VS接口可能会处理它,无论信息存储在何处。这也可以让我忽略mru项目的最大数量,避免更新/重新编号现有项目时的错误等。我找到了 IVsMRUItemsStore ,但如果这是我应该使用的我&# 39;我不确定我将使用的 categoryGuid 。从我所看到的情况来看,这个界面似乎与内置的搜索功能有关。
[编辑]好的,我已经做了一些挖掘工作。首先,IVsMRUItemsStore 似乎与项目mru列表无关,因为即使在显示最近的项目菜单后,Microsoft.VisualStudio.PlatformUI.MRUItemsStoreService似乎也是空的。其次,我尝试过直接操作注册表,但这并不好用,因为VS不知道注册表更改,因此菜单及其内部缓存保持不变。如果随后使用“打开项目”对话框打开另一个项目或解决方案,则注册表将被缓存的信息以及通过对话框打开的项目/解决方案覆盖。如果有某种方式通知VS重新读取注册表信息(不关闭VS),我会操作注册表。如果有一些其他程序化方法通过VS'操纵最近的项目列表,我也会很高兴。对象模型。
[ Edit2 ]我发现TFS中的View菜单项' Source Control Explorer完全符合我的要求。它将打开一个给定的解决方案,提示是否需要转换解决方案(不关闭打开的文档)并将项目添加到MRU。现在的问题是如何在我的扩展/插件中执行相同的操作?我无法使用他们的命令(除非它需要一个参数),因为我打开的解决方案/项目不在TFS中。
答案 0 :(得分:3)
TFS源代码管理资源管理器只是调用IVsSolution.OpenSolutionFile,它将解决方案添加到最近的文件列表中。我怀疑你所要做的只是使用它而不是EnvDTE方法,你会很高兴。