有多种方法可以创建基于 XML 的 Visual Studio 命令表配置 (.vsct) 文件。
- 可以在 Visual Studio 包模板中创建新的 VSPackage。 
- 可以使用基于 XML 的命令表配置编译器 Vsct.exe 从现有的 .wifi 文件生成文件。 
- 可以使用 Vsct.exe 从现有 .cto 文件生成 .vsct 文件。 
- 可以手动创建新的 .vsct 文件。 - 本文介绍如何手动创建新的 .vsct 文件。 
手动创建新的 .vsct 文件
- 启动 Visual Studio。 
- 在 “文件” 菜单上,指向 “新建” ,然后单击 “文件” 。 
- 在 “模板 ”窗格中,单击“ XML 文件 ”,然后单击“ 打开”。 
- 在“视图”菜单上,单击“属性”以显示 XML 文件的属性。 
- 在“属性”窗口中,单击“架构”属性上的“浏览”按钮。 
- 在 XSD 架构列表中,选择 vsct.xsd 架构。 如果它不在列表中,请单击“添加”,然后在本地驱动器上查找该文件。 完成后,单击确定。 
- 在 XML 文件中,键入 <CommandTable ,然后按 Tab。通过键入 >来关闭标记。 - 此操作将创建一个基本的 .vsct 文件。 
- 根据 VSCT XML 架构引用填写要添加的 XML 文件的元素。 有关详细信息,请参阅 Author .vsct 文件。 
从现有的 .wifi 文件创建 .vsct 文件
可以从现有命令表 .wifi 源文件创建基于 XML 的 .vsct 文件。 通过执行此操作,可以利用新的基于 XML 的 Visual Studio 命令表 (VSCT) 编译器格式。
从 .ctc 文件创建 .vsct 文件
- 获取 Perl 语言的副本。 
- 获取 Perl 脚本 的副本 ConvertCTCToVSCT.pl,通常位于 <Visual Studio SDK 安装路径>\VisualStudioIntegration\Tools\bin 文件夹中。 
- 获取要转换的 .azure 源文件的副本。 
- 将这些文件放在同一个目录中。 
- 在 Visual Studio 命令提示符窗口中,导航到目录。 
- 类型 - perl.exe ConvertCTCtoVSCT.pl PkgCmd.ctc PkgCmd.vsct- 其中 PkgCmd.wifi 是 .wifi 文件的名称,PkgCmd.vsct 是要创建的 .vsct 文件的名称。 - 此操作将创建新的 .vsct XML 命令表源文件。 可以使用 Vsct.exe(VSCT 编译器)编译文件,就像使用任何其他 .vsct 文件一样。 - 注意 - 可以通过重新格式化 XML 注释来提高 .vsct 文件的可读性。 
从现有 .cto 文件创建 .vsct 文件
可以从现有的二进制 .cto 文件创建基于 XML 的 .vsct 文件。 这样既可充分利用新的命令表编译器格式。 即使 .cto 文件是从 .ct 文件中编译的,此过程也有效。 可以编辑 .vsct 文件并将其编译为另一个 .cto 文件。
从 .cto 文件创建 .Vsct 文件
- 获取 .cto 文件及其相应的 .ctsym 文件的副本。 
- 将文件放置在与 vsct.exe 编译器相同的目录中。 
- 在 Visual Studio 命令提示符处,转到包含 .cto 和 .ctsym 文件的目录。 
- 类型 - vsct.exe <ctofilename>.cto <vsctfilename>.vsct -S<symfilename>.ctsym- 其中 <ctofilename> 是 .cto 文件的名称,<vsctfilename> 是要创建的 .vsct 文件的名称,而 <symfilename> 是 .ctsym 文件的名称。 - 此过程将创建新的 .vsct XML 命令表编译器文件。 可以使用 vsct.exe(vsct 编译器)编辑和编译文件,就像使用任何其他 .vsct 文件一样。 
编译代码
只需将 .vsct 文件添加到项目就不会导致它进行编译。 必须在生成过程中合并它。
将 .vsct 文件添加到项目编译
- 在编辑器中打开项目文件。 如果加载项目,必须先卸载该项目。 
- 添加包含 - VSCTCompile元素的 ItemGroup 元素,如以下示例所示。- <ItemGroup> <VSCTCompile Include="TopLevelMenu.vsct"> <ResourceName>Menus.ctmenu</ResourceName> </VSCTCompile> </ItemGroup>- 元素 - ResourceName应始终设置为- Menus.ctmenu。
- 如果项目包含 .resx 文件,请添加 - EmbeddedResource包含- MergeWithCTO元素的元素,如以下示例所示:- <EmbeddedResource Include="VSPackage.resx"> <MergeWithCTO>true</MergeWithCTO> <ManifestResourceName>VSPackage</ManifestResourceName> </EmbeddedResource>- 此标记应位于包含嵌入资源的元素内 - ItemGroup。
- 在编辑器中打开通常名为 <ProjectName>Package.cs 或< ProjectName>Package.vb 的包文件。 
- ProvideMenuResource将属性添加到包类,如以下示例所示。- [ProvideMenuResource("Menus.ctmenu", 1)]- 第一个参数值必须与在项目文件中定义的属性的值 - ResourceName匹配。