寫入使用者設定存放區
使用者設定是可寫入的設定,例如工具/ 選項對話框中的設定、屬性視窗和其他特定對話框。 Visual Studio 擴充功能可能會使用這些來儲存少量的資料。 本逐步解說顯示如何藉由讀取和寫入使用者設定存放區,將 [記事本] 新增至 Visual Studio 作為外部工具。
寫入使用者設定存放區
建立名為 UserSettingsStoreExtension 的 VSIX 專案,然後新增名為 UserSettingsStoreCommand 的自訂命令。 如需如何建立自訂命令的詳細資訊,請參閱使用功能表命令建立擴充功能
在 UserSettingsStoreCommand.cs 中,新增下列 using 指示詞:
using System.Collections.Generic; using Microsoft.VisualStudio.Settings; using Microsoft.VisualStudio.Shell.Settings;
在 MenuItemCallback 中,刪除方法的主體並取得使用者設定存放區,如下所示:
private void MenuItemCallback(object sender, EventArgs e) { SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider); WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); }
現在找出 [記事本] 是否已設定為外部工具。 您需要逐一查看所有外部工具,以判斷 ToolCmd 設定是否為 [記事本],如下所示:
private void MenuItemCallback(object sender, EventArgs e) { SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider); WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); // Find out whether Notepad is already an External Tool. int toolCount = userSettingsStore.GetInt32("External Tools", "ToolNumKeys"); bool hasNotepad = false; CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo; for (int i = 0; i < toolCount; i++) { if (Compare.IndexOf(userSettingsStore.GetString("External Tools", "ToolCmd" + i), "Notepad", CompareOptions.IgnoreCase) >= 0) { hasNotepad = true; break; } } }
如果 [記事本] 尚未設定為外部工具,請如下設定:
private void MenuItemCallback(object sender, EventArgs e) { SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider); WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); // Find out whether Notepad is already installed. int toolCount = userSettingsStore.GetInt32("External Tools", "ToolNumKeys"); bool hasNotepad = false; CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo; for (int i = 0; i < toolCount; i++) { if (Compare.IndexOf(userSettingsStore.GetString("External Tools", "ToolCmd" + i), "Notepad", CompareOptions.IgnoreCase) >= 0) { hasNotepad = true; break; } } string message = (hasNotepad) ? "Notepad already installed" : "Installing Notepad"; if (!hasNotepad) { userSettingsStore.SetString("External Tools", "ToolTitle" + toolCount, "&Notepad"); userSettingsStore.SetString("External Tools", "ToolCmd" + toolCount, "C:\\Windows\\notepad.exe"); userSettingsStore.SetString("External Tools", "ToolArg" + toolCount, ""); userSettingsStore.SetString("External Tools", "ToolDir" + toolCount, "$(ProjectDir)"); userSettingsStore.SetString("External Tools", "ToolSourceKey" + toolCount, ""); userSettingsStore.SetUInt32("External Tools", "ToolOpt" + toolCount, 0x00000011); userSettingsStore.SetInt32("External Tools", "ToolNumKeys", toolCount + 1); } }
測試程式碼。 請記住, [記事本] 會被新增為外部工具,因此必須在第二次執行之前復原登錄。
建置此程式碼並開始偵錯。
在工具功能表上,按一下叫用 UserSettingsStoreCommand。 這會將 [記事本] 新增至工具功能表。
現在您應該會在 [工具/ 選項] 選單上看到 [記事本],然後按一下記事本應該會顯示 [記事本] 的執行個體。