共用方式為


寫入使用者設定存放區

使用者設定是可寫入的設定,例如工具/ 選項對話框中的設定、屬性視窗和其他特定對話框。 Visual Studio 擴充功能可能會使用這些來儲存少量的資料。 本逐步解說顯示如何藉由讀取和寫入使用者設定存放區,將 [記事本] 新增至 Visual Studio 作為外部工具。

寫入使用者設定存放區

  1. 建立名為 UserSettingsStoreExtension 的 VSIX 專案,然後新增名為 UserSettingsStoreCommand 的自訂命令。 如需如何建立自訂命令的詳細資訊,請參閱使用功能表命令建立擴充功能

  2. 在 UserSettingsStoreCommand.cs 中,新增下列 using 指示詞:

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    
  3. 在 MenuItemCallback 中,刪除方法的主體並取得使用者設定存放區,如下所示:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
    }
    
  4. 現在找出 [記事本] 是否已設定為外部工具。 您需要逐一查看所有外部工具,以判斷 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;
            }
        }
    }
    
    
  5. 如果 [記事本] 尚未設定為外部工具,請如下設定:

    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);
        }
    }
    
  6. 測試程式碼。 請記住, [記事本] 會被新增為外部工具,因此必須在第二次執行之前復原登錄。

  7. 建置此程式碼並開始偵錯。

  8. 工具功能表上,按一下叫用 UserSettingsStoreCommand。 這會將 [記事本] 新增至工具功能表。

  9. 現在您應該會在 [工具/ 選項] 選單上看到 [記事本],然後按一下記事本應該會顯示 [記事本] 的執行個體。