Schreiben in den Speicher für Benutzereinstellungen

Benutzereinstellungen sind schreibbare Einstellungen wie die einstellungen im Dialogfeld "Extras/Optionen ", "Eigenschaftenfenster" und bestimmten anderen Dialogfeldern. Visual Studio-Erweiterungen können diese verwenden, um kleine Datenmengen zu speichern. In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie Visual Studio Editor als externes Tool hinzufügen, indem Sie aus dem Speicher der Benutzereinstellungen lesen und schreiben.

Schreiben in den Speicher für Benutzereinstellungen

  1. Erstellen Sie ein VSIX-Projekt mit dem Namen "User Einstellungen StoreExtension", und fügen Sie dann einen benutzerdefinierten Befehl mit dem Namen "User Einstellungen StoreCommand" hinzu. Weitere Informationen zum Erstellen eines benutzerdefinierten Befehls finden Sie unter Erstellen einer Erweiterung mit einem Menübefehl

  2. Fügen Sie in "User Einstellungen StoreCommand.cs" die folgenden Direktiven hinzu:

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    
  3. Löschen Sie in MenuItemCallback den Textkörper der Methode, und rufen Sie den Benutzereinstellungenspeicher wie folgt ab:

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
    }
    
  4. Erfahren Sie nun, ob Editor bereits als externes Tool festgelegt ist. Sie müssen alle externen Tools durchlaufen, um zu bestimmen, ob die Einstellung "ToolCmd" wie folgt Editor lautet:

    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. Wenn Editor nicht als externes Tool festgelegt wurde, legen Sie sie wie folgt fest:

    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. Testen des Codes Denken Sie daran, dass sie Editor als externes Tool hinzufügt, daher müssen Sie die Registrierung zurücksetzen, bevor Sie sie ein zweites Mal ausführen.

  7. Erstellen Sie den Code, und starten Sie das Debuggen.

  8. Klicken Sie im Menü "Extras" auf "Benutzer aufrufen Einstellungen StoreCommand". Dadurch wird Editor zum Menü "Extras" hinzugefügt.

  9. Nun sollte im Menü "Extras/Optionen" Editor angezeigt werden, und durch Klicken auf Editor sollte eine Instanz von Editor angezeigt werden.