1.創建自定義命令
2.更改.vsct中Group節點的id
<Group guid="guidPublishOwinPackageCmdSet1" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE" /> </Group>
列舉 Group 節點的Id屬性其中比較關鍵的幾個
IDM_VS_CTXT_SOLNNODE 是指的解決方案資源管理器里的解決方案
IDM_VS_CTXT_SOLNFOLDER 是指的解決方案資源管理器里的 解決方案里的文件夾,不是項目里的哈,這個文件夾是虛擬的,沒有實際的文件夾映射
IDM_VS_CTXT_PROJNODE 是指的解決方案資源管理器里的項目
IDM_VS_CTXT_FOLDERNODE 是指的解決方案資源管理器里的項目里的文件夾
IDM_VS_CTXT_ITEMNODE 是指的解決方案資源管理器里的項目里的項,就例如cs、js文件
3.獲取右鍵選擇的項目物理路徑
private static Tuple<string, string, string> GetPath(IServiceProvider serviceProvider) { var dte = serviceProvider.GetService(typeof(DTE)) as DTE2; var projects = (UIHierarchyItem[])dte?.ToolWindows.SolutionExplorer.SelectedItems; if (projects == null) { ShowMessage("未選中任何項目!", serviceProvider); return null; } var project = projects[0]; var item = project.Object as Project; var path = item?.FullName; if (string.IsNullOrWhiteSpace(path)) { ShowMessage("項目路徑為空!", serviceProvider); return null; } if (!File.Exists(path)) { ShowMessage(path + "文件不存在!", serviceProvider); return null; } var srcPath = item?.Properties.Item("FullPath").Value?.ToString(); if (string.IsNullOrWhiteSpace(srcPath)) { ShowMessage("FullPath路徑為空!", serviceProvider); return null; } //path:.csproj全路徑 //srcPath:.csproj所在的目錄 //item.Name:項目名稱 return Tuple.Create(path, srcPath, item.Name); }