C# 获取通过IVsHierachy选择的项目的完整路径

C# 获取通过IVsHierachy选择的项目的完整路径,c#,visual-studio-2010,vspackage,C#,Visual Studio 2010,Vspackage,大家好,我正在制作一个VisualStudio包,当右键单击某些类型的文件时,它会在解决方案资源管理器中创建一个上下文菜单。我有菜单工作,但我需要抓住完整的路径,而不是文件名。我这样做是因为在上下文菜单中选择一个选项会打开一个命令行程序,该程序将完整路径作为参数 现在看起来是这样的: foreach (var ItemSelected in vsItemSelections) { object val

大家好,我正在制作一个VisualStudio包,当右键单击某些类型的文件时,它会在解决方案资源管理器中创建一个上下文菜单。我有菜单工作,但我需要抓住完整的路径,而不是文件名。我这样做是因为在上下文菜单中选择一个选项会打开一个命令行程序,该程序将完整路径作为参数

现在看起来是这样的:

    foreach (var ItemSelected in vsItemSelections)
                    {
                        object value;
                        hierarchy.GetProperty(ItemSelected.itemid, (int) __VSHPROPID.VSHPROPID_Name, out value);
                        if (value != null && value.ToString().EndsWith(".rst"))
                        {
                            cmd.Visible = true;
                        }
                        else
                        {
                            cmd.Visible = false;
                            break;
                        }
                    }
因此,如果选择了.rst文件,我可以使该命令在上下文菜单中可见,但显然我需要完整的路径。我已经尝试了我能想到的一切,但这对我来说是一个全新的领域


我有一个解决方案,它已经可以使用ENVDTE80.DTE应用程序对象工作,但它在运行时看起来非常笨重。

它最终取决于层次结构的类型(并非所有项目都支持“完整路径”概念),但对于大多数层次结构,此方法应该可以得到您需要的:

IVsHierarchy.GetCanonicalName(uint itemid, out string pbstrName);

它最终取决于层次结构的类型(并非所有项目都支持“完整路径”概念),但对于大多数层次结构,此方法应能得到您所需要的:

IVsHierarchy.GetCanonicalName(uint itemid, out string pbstrName);