c# - Visual Studio 扩展编程中 .vsct 文件中的 GUID 和 ID 有什么区别?

标签 c# visual-studio-2013 visual-studio-2015 visual-studio-extensions

例如考虑以下代码:

<Group guid="guidFirstCommandCmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>

<Group guid="guidSecondCommandCmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>

这里,为什么要同时定义GUID和ID呢? id="IDM_VS_MENU_TOOLS"指的是 Visual Studio 中的工具菜单。 guid="guidSHLMainMenu"有什么用?

还要考虑以下代码:

  <Button guid="guidSecondCommandCmdSet" id="cmdidSecondCommand" priority="2" type="Button">
    <Parent guid="guidSecondCommandCmdSet" id="MyMenuGroup"/>
    <Icon guid="guidImages" id="bmpPic2"/>
    <Strings>
      <ButtonText>XXX Command</ButtonText>
    </Strings>
  </Button>

我知道该按钮的 ID 名为“cmdidSecondCommand”,但该按钮的 GUID 将用于何处?我们已经在下一个元素中定义了按钮的父容器。

最佳答案

GUID 顾名思义就是一个 globally unique identifier格式为 {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}ID 是一个键(或标识符);它像常量一样使用,允许为数值赋予描述性名称。

由于 ID 背后的值在所有命令集(或图像条)中都不是唯一的,因此 GUID 用于将它们置于上下文中...... guid 和数值的组合用于唯一标识组、菜单、工具栏、按钮、图像等...

在给定的示例中,MyMenuGroupIDM_VS_MENU_TOOLS 可能具有相同的数字值,但是 guids guidSecondCommandCmdSetguidSHLMainMenu 将它们放入上下文中...

<Group guid="guidSecondCommandCmdSet" id="MyMenuGroup" priority="0x0600">
    <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>

当您想在代码中为控件注册 Execute 和 QueryStatus 处理程序、为按钮设置图标、将元素设置为关系;例如将组添加到工具栏或菜单等...

关于c# - Visual Studio 扩展编程中 .vsct 文件中的 GUID 和 ID 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35200881/

相关文章:

c# - 普遍接受的私有(private)变量声明约定

c++ - 在 Visual Studio 2013 中使用 Libusb

c# - 无法使用 Visual Studio 2013 中的 F5 进行调试,模块窗口为空

c++ - 为什么我不能使用 auto 声明变量?

entity-framework - 解决 Microsoft.Data.Entity.SqlServer 的依赖关系失败

c# web api post 请求 null

c# - 如何在 IIS 级别的 Asp.Net Core 中配置 MachineKey

c# - C# 中相同函数的静态和非静态版本

visual-studio - 使用 VS2013 但仍然出现 "The builds tools for v120 (Platform Toolset = ' v12 0') cannot be found."错误

c# - 如何对 ASP.NET Core Controller 或模型对象进行单元测试?