为了账号安全,请及时绑定邮箱和手机立即绑定

Visual Studio 拓展开发

标签:
C# .NET

Visual Studio 拓展开发

  • 本文介绍从零开始开发一个 VS 拓展,并介绍一些相关的基础知识
  • 官方文档:https://docs.microsoft.com/zh-cn/visualstudio/extensibility/starting-to-develop-visual-studio-extensions?view=vs-2019

安装 Visual Studio sdk

  • 依次操作:打开 VS -> 工具 -> 获取工具和功能
  • 在安装面板选择 VS 拓展开发进行安装

新建项目

  • 安装完 sdk 后,项目模板就会出现拓展相关的模板,如果没有重启 VS。搜索vsix,选择选择空模板创建项目
  • 项目的 vsixmanifest 文件,主要是用于对拓展包的设置,比如包名、作者、版本等等

添加菜单和处理命令

  • 添加新项,选择拓展类别(Extensibility),找到Command那一项
  • 此时项目会多几个文件,其中,Command1.cs是命令点击后的处理;Command1Package.cs是拓展包的入口,负责包的初始化以及调用Command1.cs的初始化方法以注册点击事件;Command1Package.vsct是 ui 文件,负责拓展包的 ui 布局,记录每个元素的标识和位置(控制出现在 VS 的文件、编辑、视图、窗口等菜单下)
  • Command1.cs的 Execute 方法中则是点击事件的处理回调,这里的代码是打开一个弹窗。打开Command1Package.vsct文件,找到 Button 元素,修改 ButtonText 内容为hello world
  • 点击运行,此时会启动一个 VS 的实例,打开后,在工具菜单下就可以看到hello world菜单,点击即可打开一个弹窗
  • 具体例子参考 hello-world

vsct 文件详解

  • 命令表配置文件是描述的 VSPackage 包含的命令集的文本文件。 Visual Studio 命令表 (VSCT) 编译器将基于 XML 的配置文件 (.vsct 文件) 编译为二进制的命令表输出 (.cto) 文件。 生成.cto 文件是不同于使用命令表 (启动 CTC) 编译器来编译.ctc 配置文件创建的。 但是,基于 XML 的.vsct 文件具有一些优势,例如 XML 编辑器和 XML IntelliSense。
  • vsct 文件记录着拓展的 ui 布局,比如自定义菜单、工具栏、命令组和命令,图片的设置等等。
  • vsct 文件层次元素:
    • CommandTable 元素:根元素,可表示的所有命令、 菜单组和 VSPackage 与关联的菜单。
    • Extern 元素:引用你想要合并的任何外部.h 文件。
    • Include 元素:引用要进行编译以及任何其他标头 (.h) 文件。
    • Commands 元素:表示所有可执行的单个命令。 每个命令具有以下四个子元素:
    • Menus 元素:表示在 VSPackage 中所有菜单和工具栏。
    • Groups 元素:表示所有在 VSPackage 中的组。组是单个命令的集合。
    • Buttons 元素:表示在 VSPackage 中所有的命令按钮和菜单项。按钮是可以与命令相关联的可视控件。
    • Bitmaps 元素:表示在 VSPackage 中所有按钮的图标。
    • CommandPlacements 元素:指示其中的单个命令应放置在你的 VSPackage 的菜单中的其他位置。
    • VisibilityConstraints 元素:指定在所有时间命令将显示,或仅在某些上下文中,例如何时显示在特定对话框或窗口中。 仅当指定的上下文处于活动状态时,将显示菜单和命令,并提供此元素的值。 默认行为是可在任何时候显示命令。
    • KeyBindings 元素:指定命令的任何键绑定。也就是说,一个或多个键组合必须按下执行命令,如 Ctrl+S。
    • UsedCommands 元素:通知 Visual Studio 环境当前 VSPackage 处于活动状态时,将由其他代码,实现指定的命令,尽管它提供了命令实现。
    • Symbols 元素:包含的符号名称和 GUID 的所有包中命令的 Id。实际上相当于变量声明,声明了才能使用。
  • 参考:https://docs.microsoft.com/zh-cn/visualstudio/extensibility/internals/designing-xml-command-table-dot-vsct-files?view=vs-2019

父级菜单

  • 拓展中的大部分菜单都是按钮,而他们的位置是根据父级菜单或者在一组里面的,因此菜单要选择位置只需要选择父级菜单即可。而且还可以设置多个父级,以便在多个地方都显示。下面列举 Visual Studio 菜单栏上的组的 GUID 和 ID 的值
  • 首先看下 vstc 文件中父级菜单的设置,Parent元素的 id 值就是我们要设置的东西
    <Groups>
      <Group guid="guidCommand1PackageCmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
      </Group>
    </Groups>

在 Visual Studio 菜单栏上的组

  • 若要将菜单添加到菜单栏,设置其中一个组作为其父级。
    Group Id
    文件/编辑/视图(File/Edit/View) IDG_VS_MM_FILEEDITVIEW
    重构(Refactoring) IDG_VS_MM_REFACTORING
    项目(Project) IDG_VS_MM_PROJECT
    生成(Build) IDG_VS_MM_BUILDDEBUGRUN
    格式/工具(Format/Tools) IDG_VS_MM_TOOLSADDINS
    窗口/帮助/社区(Window/Help/Community) IDG_VS_MM_WINDOWHELP
    外接程序(Addins) IDG_VS_MM_MACROS
    全屏显示栏(FullScreenBar) IDG_VS_MM_FULLSCREENBAR

在 Visual Studio 菜单栏上的菜单

  • 若要将组添加到现有 Visual Studio 菜单中,在以下菜单选一个作为其父父级。 此列表中不包含子菜单。
    Menu ID
    File
    Edit IDM_VS_MENU_EDIT
    View IDM_VS_MENU_VIEW
    Refactor IDM_VS_MENU_REFACTORING
    Project IDM_VS_MENU_PROJECT
    Build IDM_VS_MENU_BUILD
    Format IDM_VS_MENU_FORMAT
    Tools IDM_VS_MENU_TOOLS
    Extensions IDM_VS_MENU_EXTENSIONS
    Window IDM_VS_MENU_WINDOW
    Addins IDM_VS_MENU_ADDINS
    Community IDM_VS_MENU_COMMUNITY
    Help IDM_VS_MENU_HELP

Visual Studio 菜单上的组

文件菜单组

Group ID
New/Open IDG_VS_FILE_FILE
Add IDG_VS_FILE_ADD
Solution IDG_VS_FILE_SOLUTION
Misc IDG_VS_FILE_MISC
Save IDG_VS_FILE_SAVE
Rename IDG_VS_FILE_RENAME
Browser IDG_VS_FILE_BROWSER
Print IDG_VS_FILE_PRINT
Most Recently Used IDG_VS_FILE_MRU
Move IDG_VS_FILE_MOVE
Exit IDG_VS_FILE_EXIT

编辑菜单组

Group ID
Undo/Redo IDG_VS_EDIT_UNDOREDO
Cut/Copy/Paste IDG_VS_EDIT_CUTCOPY
Select IDG_VS_EDIT_SELECT
GoTo IDG_VS_EDIT_GOTO
Find IDG_VS_EDIT_FIND
Objects IDG_VS_EDIT_OBJECTS
OLE Verbs IDG_VS_EDIT_OLEVERBS
Command Well IDG_VS_EDIT_COMMANDWELL

重构菜单组

Group ID
Common IDG_REFACTORING_COMMON
Advanced IDG_REFACTORING_ADVANCED

视图菜单组

Group ID
Form Code IDG_VS_VIEW_FORMCODE
Browser IDG_VS_VIEW_BROWSER
Define Views IDG_VS_VIEW_DEFINEVIEWS
Windows IDG_VS_VIEW_WINDOWS
Architect Windows IDG_VS_VIEW_ARCH_WINDOWS
Organization Windows IDG_VS_VIEW_ORG_WINDOWS
Code Browser IDG_VS_VIEW_CODEBROWSENAV_WINDOWS
Dev Windows IDG_VS_VIEW_DEV_WINDOWS
Toolbars IDG_VS_VIEW_TOOLBARS
Symbols IDG_VS_VIEW_SYMBOLNAVIGATE
Navigate IDG_VS_VIEW_NAVIGATE
Small Navigate IDG_VS_VIEW_SMALLNAVIGATE
Object Browser IDG_VS_VIEW_OBJBRWSR
Command Well IDG_VS_VIEW_COMMANDWELL
Property Pages IDG_VS_VIEW_PROPPAGES
Refresh IDG_VS_VIEW_REFRESH

项目菜单组

Group ID
Miscellaneous Add IDG_VS_PROJ_MISCADD
Add IDG_VS_PROJ_ADD
Folder IDG_VS_PROJ_FOLDER
Unload/Reload IDG_VS_PROJ_UNLOADRELOAD
Reference IDG_VS_PROJ_REFERENCE
Options IDG_VS_PROJ_OPTIONS
Settings IDG_VS_PROJ_SETTINGS

生成菜单组

Group ID
Solution IDG_VS_BUILD_SOLUTION
Selection IDG_VS_BUILD_SELECTION
Profile Guided Optimization IDG_VS_PGO_SELECTION
Miscellaneous IDG_VS_BUILD_MISC
Cancel IDG_VS_BUILD_CANCEL

工具菜单组

Group ID
Command Line IDG_VS_TOOLS_CMDLINE
Snippets IDG_VS_TOOLS_SNIPPETS
Object Subset IDG_VS_TOOLS_OBJSUBSET
Options IDG_VS_TOOLS_OPTIONS
Other 2 IDG_VS_TOOLS_OTHER2
External Tools IDG_VS_TOOLS_EXT_TOOLS
External Customizations IDG_VS_TOOLS_EXT_CUST

窗口菜单组

Group ID
New IDG_VS_WINDOW_NEW
Dock/Close IDG_VS_DOCKCLOSE
Dock/Hide IDG_VS_DOCKHIDE
Arrange IDG_VS_WINDOW_ARRANGE
Navigation IDG_VS_WINDOW_NAVIGATION
List IDG_VS_WINDOW_LIST

帮助菜单组

Group ID
Samples IDG_VS_HELP_SAMPLES
Support IDG_VS_HELP_SUPPORT
About IDG_VS_HELP_ABOUT

其他菜单

  • 用于扩展项目系统的 IDE 定义的命令:https://docs.microsoft.com/zh-cn/visualstudio/extensibility/internals/ide-defined-commands-for-extending-project-systems?view=vs-2019
  • 其他菜单待补充。

总结

  • 如果想要了解 vs 拓展开发,那么到这里,相信你应该已心中有数,知道什么文件是什么、起什么作用,如何布局,如何处理事件。本文让你知道该去哪里找合适的资料和例子
  • 如果需要参考,那么可以在具备基础知识之后,去应用市场那里https://marketplace.visualstudio.com/vs找一个合适的来进行参考
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消