VS 中右键菜单添加“用 VSCODE 打开”功能 - VSIX 插件开发教程
VS 中右键菜单添加“用 VSCODE 打开”功能 - VSIX 插件开发教程
本文介绍如何使用 C# 开发一个 VSIX 插件,实现 VS 中右键菜单添加“用 VSCODE 打开”功能,方便用户快速使用 VSCODE 打开 HTML 文件。
实现步骤
-
创建 VSIX 项目:
- 使用 Visual Studio 2017 或更新版本。
- 在“解决方案资源管理器”中右键单击“源”文件夹,选择“添加” > “新项”。
- 在“添加新项”对话框中,选择“Visual C#” > “Extensibility”,然后选择“VSIX 项目模板”。
- 为项目指定名称和位置,然后单击“添加”。
-
编写代码:
- 打开“源”文件夹中的“菜单项.cs”文件。
- 添加以下代码:
using EnvDTE; using EnvDTE80; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using System; using System.ComponentModel.Design; using System.Diagnostics; using System.IO; namespace MyExtension { internal sealed class OpenWithVSCodeCommand { private readonly Package package; private OpenWithVSCodeCommand(Package package) { if (package == null) { throw new ArgumentNullException('package'); } this.package = package; OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (commandService != null) { var menuCommandID = new CommandID(Guids.MyExtensionCmdSet, (int)PkgCmdIDList.cmdidOpenWithVSCode); var menuItem = new OleMenuCommand(MenuItemCallback, menuCommandID); menuItem.BeforeQueryStatus += BeforeQueryStatus; commandService.AddCommand(menuItem); } } public static OpenWithVSCodeCommand Instance { get; private set; } private IServiceProvider ServiceProvider { get { return this.package; } } public static void Initialize(Package package) { Instance = new OpenWithVSCodeCommand(package); } private void BeforeQueryStatus(object sender, EventArgs e) { OleMenuCommand menuCommand = sender as OleMenuCommand; if (menuCommand != null) { menuCommand.Visible = menuCommand.Enabled = false; DTE2 dte = ServiceProvider.GetService(typeof(DTE)) as DTE2; if (dte != null && dte.SelectedItems.Count > 0) { SelectedItem item = dte.SelectedItems.Item(1); if (item != null && item.ProjectItem != null && item.ProjectItem.Name.EndsWith('.html', StringComparison.OrdinalIgnoreCase)) { menuCommand.Visible = menuCommand.Enabled = true; } } } } private void MenuItemCallback(object sender, EventArgs e) { DTE2 dte = ServiceProvider.GetService(typeof(DTE)) as DTE2; if (dte != null && dte.SelectedItems.Count > 0) { SelectedItem item = dte.SelectedItems.Item(1); if (item != null && item.ProjectItem != null && item.ProjectItem.Name.EndsWith('.html', StringComparison.OrdinalIgnoreCase)) { string path = item.ProjectItem.FileNames[1]; string vscode = 'code'; string arguments = '"' + path + '"'; Process.Start(vscode, arguments); } } } } }- 该类会创建一个菜单命令并注册一个回调函数,在用户单击菜单项时会调用该函数。
- 在回调函数中,我们获取到当前选定的项目项,如果是一个 HTML 文件,就用 VS Code 打开它。
-
配置菜单项:
- 打开“源”文件夹中的“菜单项.vsct”文件。
- 在“CommandTable”元素下添加以下代码:
<Commands> <Groups> <Group guid='guidMyExtensionCmdSet' id='MyMenuGroup' priority='0x0600'> <Parent guid='guidSHLMainMenu' id='IDM_VS_MENU_TOOLS'/> </Group> </Groups> <Menus> <Menu guid='guidMyExtensionCmdSet' id='MyMenu' priority='0x0100' type='Menu'> <Parent guid='guidMyExtensionCmdSet' id='MyMenuGroup' /> <Strings> <ButtonText>用 VSCODE 打开</ButtonText> </Strings> </Menu> </Menus> <Buttons> <Button guid='guidMyExtensionCmdSet' id='cmdidOpenWithVSCode' priority='0x0100' type='Button'> <Parent guid='guidMyExtensionCmdSet' id='MyMenu' /> <Icon guid='guidImages' id='bmpPic1' /> <Strings> <CommandName>cmdidOpenWithVSCode</CommandName> <ButtonText>用 VSCODE 打开</ButtonText> </Strings> </Button> </Buttons> </Commands>- 这个 XML 文件定义了一个菜单项。
- 它包含一个菜单和一个菜单项,当用户右键单击一个 HTML 文件时,就会出现这个菜单。
- 菜单项的文本为“用 VSCODE 打开”。
-
初始化插件:
- 打开“源”文件夹中的“Package.cs”文件。
- 在“Initialize”方法中添加以下代码:
OpenWithVSCodeCommand.Initialize(this);- 这个方法会在插件加载时调用。
- 它会初始化菜单项,使其能够在 Visual Studio 中使用。
-
编译和运行:
- 编译并运行插件。
- 在 Visual Studio 中打开一个 HTML 文件,右键单击它,就会看到一个名为“用 VSCODE 打开”的菜单项。
- 单击它,就会用 VS Code 打开该文件。
总结
通过以上步骤,你就可以成功地在 VS 中添加一个右键菜单“用 VSCODE 打开”,方便用户快速使用 VS Code 打开 HTML 文件。
原文地址: https://www.cveoy.top/t/topic/np7u 著作权归作者所有。请勿转载和采集!