共用方式為


設計 XML 命令資料表 (.vsct) 檔案

XML 命令資料表 (.vsct) 檔案描述 VSPackage 命令項目的版面配置和外觀。 命令項目包括按鈕、下拉式方塊、功能表、工具列和命令項目的群組。 本文說明 XML 命令資料表檔案、它們如何影響命令項目和功能表,以及如何建立它們。

命令、功能表、群組和 .vsct 檔案

.vsct 檔案會圍繞命令、功能表和命令群組進行整理。 .vsct 檔案中的 XML 標籤代表這些項目,以及其他相關聯的項目,例如命令按鈕、命令放置和點陣圖。

當您藉由執行 Visual Studio 套件範本來建立新的 VSPackage 時,範本會根據您的選取項目,產生具有功能表命令、工具視窗或自訂編輯器必要元素的 .vsct 檔案。 然後,您可以修改這個 .vsct 檔案,以符合特定 VSPackage 的需求。 如需如何修改 .vsct 檔案的範例,請參閱擴充功能表和命令

若要建立新的空白 .vsct 檔案,請參閱操作說明:建立 .vsct 檔案。 建立之後,您會將 XML 元素、屬性和值新增至檔案,以描述命令項目配置。 如需詳細的 XML 架構,請參閱 VSCT XML 架構參考

.ctc 與 .vsct 檔案之間的差異

雖然 .vsct 檔案中 XML 標籤背後的意義與現在已被取代的 .ctc 檔案格式中的標記相同,但其實作有點不同:

  • 新的 <extern> 標籤是您參考要編譯的其他 .h 檔案的位置,例如 Visual Studio 工具列的那些檔案。

  • 雖然 .vsct 檔案支援 /include 陳述式,就像 .ctc 檔案一樣,它也具有新的 <import> 元素。 差異在於 /include 會帶入所有資訊,而 <import> 只會帶入名稱。

  • 雖然 .proxy 檔案需要您定義預處理器指示詞的標頭檔案,但 .vsct 檔案不需要標頭檔案。 相反地,請將指示詞放在符號資料表中位於 .vsct 檔案底部的 <[符號]> 元素中。

  • .vsct 檔案具有 <[註釋]> 標籤,可讓您內嵌任何您想要的資訊,例如附註或甚至圖片。

  • 值會儲存為項目上的屬性。

  • 命令旗標可以個別儲存或堆疊。 不過,IntelliSense 無法在堆疊命令旗標上運作。 如需命令旗標的詳細資訊,請參閱 CommandFlag 元素

  • 您可以指定多個類型,例如分割下拉式清單、下拉式清單等。

  • GUID 不會驗證。

  • 每個 UI 元素都有一個字串,代表與其一起顯示的文字。

  • 上層是選用的。 如果省略,則會使用群組未知值。

  • Icon 引數是選用的。

  • [點陣圖] 區段:此區段與 .ctc 檔案中的相同,不同之處在於您現在可以透過 Href 指定檔案名稱,該檔案名稱在編譯時期由 vsct.exe 編譯程式提取。

  • ResID:可以使用舊的點陣圖資源識別碼,而且仍然與 .ctre 檔案中的運作方式相同。

  • HRef:新的方法,可讓您指定點陣圖資源的檔案名稱。 它假設已全部使用,因此您可以略過 [已使用] 區段。 編譯程式會先搜尋檔案的本機資源,然後在任何 net 共用上,以及 /I 參數所定義的任何資源。

  • Keybinding:您不再需要指定模擬器。 如果您指定模擬器,編譯程式會假設編輯器和模擬器相同。

  • Keychord:Keychord 已被捨棄。 新格式為 Key1,Mod1,Key2,Mod2。 您可以指定字元、十六進位或 VK 常數。

新的編譯程式 vsct.exe會編譯 .rc.vsct 檔案。 不過,舊的 ctc.exe 編譯程式無法辨識或編譯 .vsct 檔案。

您可以使用 vsct.exe 編譯程式,將現有的 .cto 檔案轉換成 .vsct 檔案。 如需詳細資訊,請參閱 操作說明:從現有 .cto 檔案建立 .vsct 檔案

.vsct 檔案元素

命令資料表具有下列階層和元素:

  • CommandTable 元素:代表與 VSPackage 相關聯的所有命令、功能表群組和功能表。

  • Extern 元素:參考您想要與 .vsct 檔案合併的任何外部 .h 檔案。

  • Include 元素:參考您想要與 .vsct 檔案一起編譯的任何其他標頭 (.h) 檔案。 .vsct 檔案可以包含那些包含常數的 .h 檔案,這些常數會定義 IDE 或其他 VSPackage 提供的命令、功能表群組和功能表。

  • Commands 元素:代表可執行的所有個別命令。 每個指令都有下列四個子元素:

  • Menus 元素:代表 VSPackage 中的所有功能表和工具列。 功能表是命令群組的容器。

  • Groups 元素:代表 VSPackage 中的所有群組。 群組是個別命令的集合。

  • Buttons 元素:代表 VSPackage 中的所有命令按鈕和功能表項目。 按鈕是可以與命令相關聯的視覺控制項。

  • Bitmaps 元素:代表 VSPackage 中所有按鈕的所有點陣圖。 點陣圖是依內容而定,顯示在命令按鈕旁或命令按鈕上的圖片。

  • CommandPlacements 元素:指出 VSPackage 功能表中應該放置個別命令的其他位置。

  • VisibilityConstraints 元素:指定命令是否隨時顯示,或只在特定內容中顯示,例如顯示特定對話方塊或視窗時。 只有指定的內容為使用中時,才會顯示具有這個專案值的功能表和命令。 預設行為是隨時顯示命令。

  • KeyBindings 元素:指定命令的任何索引鍵繫結。 也就是說,必須按下一或多個按鍵組合來執行命令,例如 Ctrl+S

  • UsedCommands 元素:通知 Visual Studio 環境,雖然指定的命令是由其他程式碼實作,但當目前的 VSPackage 為使用中時,它會提供命令實作。

  • Symbols 元素:包含套件中所有命令的符號名稱和 GUID 識別碼。

.vsct 檔案設計指導方針

若要成功設計 .vsct 檔案,請遵循這些指導方針。

  • 命令只能放在群組中,群組只能放在功能表中,而功能表只能放在群組中。 IDE 中實際上只會顯示功能表、群組和命令。

  • 子功能表無法直接指派給功能表,但必須指派給群組,而群組又指派給功能表。

  • 您可以使用定義指示詞的上層欄位,將命令、子功能表和群組指派給一個上層群組或功能表。

  • 只透過指示詞中的上層欄位來整理命令資料表具有極大限制。 定義物件的指示詞只能採用一個上層引數。

  • 重複使用命令、群組或子指令需要使用新的指示詞,才能使用自己的 GUID:ID 配對來建立物件的新執行個體。

  • 每個 GUID:ID 配對都必須是唯一的。 IOleCommandTarget 介面會處理已重複使用已放置於功能表、工具列或操作功能表上的命令。

  • 命令和子功能表也可以指派給多個群組,而且可以使用 Commands 元素來將群組指派給多個功能表。

.vsct 檔案附註

如果您在編譯 .vsct 檔案並將其放在原生附屬 DLL 之後對 .vsct 檔案進行任何變更,您應該執行 devenv.exe /setup /nosetupvstemplates。 這麼做會強制重新讀取實驗性登錄中指定的 VSPackage 資源,以及描述要重建 Visual Studio 的內部資料庫。

在開發期間,可以在實驗登錄區中建立並註冊多個 VSPackage 專案,這可能會導致 IDE 混亂。 若要修正此問題,您可以將實驗登錄區重設為預設設定,以移除所有已註冊的 VSPackage,以及它們可能對 IDE 所做的任何變更。 若要重設實驗登錄區,請使用 Visual Studio SDK 隨附的 CreateExpInstance.exe 工具。 您可以在下列位置找到:

%PROGRAMFILES(x86)%\Visual Studio\<version> SDK\VisualStudioIntegration\Tools\Bin\CreateExpInstance.exe

使用 CreateExpInstance /Reset 命令執行工具。 請記住,此工具會從實驗登錄區移除所有未與 Visual Studio 一起安裝的已註冊 VSPackage。