我正在尝试为Visual Studio创建我的第一个扩展,到目前为止,我一直在按照本教程进行入门(http://www.diaryofaninja.com/blog/2014/02/18/who-said-building -visual-studio-extensions-was-hard)。现在,当我在解决方案资源管理器中单击文件时,出现一个自定义菜单项。现在,我的小项目需要在解决方案资源管理器中获取所选文件的路径,但我不知道该怎么做。有什么帮助吗?
----------------------------编辑--------------------- ---------
正如matze所说,答案在我发布的链接中。当我写它的时候我只是没有注意到它。同时,我还在该线程中找到了另一个可能的答案:如何使用vs包在解决方案资源管理器中获取所选项目的详细信息
我在哪里找到此代码:
foreach (UIHierarchyItem selItem in selectedItems)
{
ProjectItem prjItem = selItem.Object as ProjectItem;
string filePath = prjItem.Properties.Item("FullPath").Value.ToString();
//System.Windows.Forms.MessageBox.Show(selItem.Name + filePath);
return filePath;
}
因此,这里有两种获取所选文件路径的方法:)
您提到的文章已经包含了解决方案。
menuCommand_BeforeQueryStatus
在示例代码中查找方法。它使用该IsSingleProjectItemSelection
方法获取IVsHierarchy
代表项目的对象以及所选项目的ID。看来您可以安全地将层次结构强制转换为IVsProject
并使用其GetMkDocument
功能来查询项目的完整路径...
IVsHierarchy hierarchy = null;
uint itemid = VSConstants.VSITEMID_NIL;
if (IsSingleProjectItemSelection(out hierarchy, out itemid))
{
IVsProject project;
if ((project = hierarchy as IVsProject) != null)
{
string itemFullPath = null;
project.GetMkDocument(itemid, out itemFullPath);
}
}
我不想将文章中的整个代码复制到此答案中,但是该IsSingleProjectItemSelection
函数如何获取所选项目可能会很有趣。因此,我只是添加一些注释,以指导正确的方向...该方法使用GetCurrentSelection
全局IVsMonitorSelection
服务的方法来查询当前选定的项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句