VS2017插件開發-項目右鍵菜單


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);
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM