写入用户设置存储
用户设置是可写入的设置, 如“工具/选项 ”对话框、属性窗口和其他某些对话框中的设置。 Visual Studio 扩展可能会使用这些扩展来存储少量数据。 本演练演示如何通过读取和写入用户设置存储,将记事本添加到 Visual Studio 作为外部工具。
写入用户设置存储
创建名为 User设置StoreExtension 的 VSIX 项目,然后添加名为 User设置StoreCommand 的自定义命令。 有关如何创建自定义命令的详细信息,请参阅 使用菜单命令创建扩展
在 User设置StoreCommand.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); } }
测试代码。 请记住,它将记事本添加为外部工具,因此必须在再次运行注册表之前回滚注册表。
生成代码并开始调试。
在“工具”菜单上,单击“调用用户设置StoreCommand”。 这将向“工具”菜单添加记事本。
现在,应会在“工具/选项”菜单上看到记事本,单击记事本会显示记事本实例。