Пошаговое руководство: Использование параметров хранилище
Хотя параметры Visual Studio обычно сохраняются в системном реестре можно decouple хранение параметров из реестра с использованием хранилища параметров. Использование параметров хранилища вместо реестра упрощает развертывание и повысит уровень безопасности.
2 Типа параметров хранения:
Параметры конфигурации, которые только для чтения параметры Visual Studio и VSPackage. Visual Studio осуществляет слияние параметров из всех известных файлов .pkgdef в данном хранилище.
Параметры пользователей, которые перезаписываемые параметры, например те, которые отображаются на страницах в диалоговом окне Параметры, страницах свойств и некоторых других диалоговых окнах. Расширения Visual Studio могут использовать эти для локального хранения небольших объемов данных.
В этом пошаговом руководстве показано, как использовать оба типа параметра хранит.
Создание примера проекта
В этом подразделе показано создание простого проекта хранилища параметров.
Чтобы создать пример проекта
Создание пакета SettingsStorageVisual Studio с именем проекта.
Дополнительные сведения о создании управляемого VSPackage см. в разделе Пошаговое руководство: Создание команды меню ресурсов с помощью шаблона пакета Visual Studio.
На странице Выбрать язык программирования выберите Visual C#.
На странице Выберите параметры пакета VSPackage выберите Команда меню.
На странице Параметры команды измените Имя команды к хранение параметров и Идентификатор команды к cmdidSettingsStorage.
На странице Выбрать параметры тестирования, снимите оба флажка и нажмите кнопку Готово.
Нажмите клавишу F5, чтобы запустить экспериментальном экземпляре Visual Studio.
В экспериментальном экземпляре, в меню Сервис, нажмите кнопку хранение параметров.
Следующее сообщение должно быть отображено.
Внутреннее Microsoft.SettingsStorage.SettingsStoragePackage.MenuItemCallback ().
Закройте экспериментальном экземпляр.
Существует несколько способов вывода текста из VSPackage. В этом пошаговом руководстве показано, как изменить метод SettingsStoragePackage.MenuItemCallback для отображения результатов каждого из следующих действий.
Использование хранилища параметров конфигурации
В этом подразделе показано, как использовать другое SettingsManager и методы SettingsStore для обнаружения и указать параметры конфигурации.
Использовать хранилище параметров конфигурации
Откройте файл SettingsStoragePackage.cs в редакторе кода.
Добавьте эти линии в начало файла:
using System.Collections.Generic; using Microsoft.VisualStudio.Settings; using Microsoft.VisualStudio.Shell.Settings;
Добавьте эти линии к началу метода MenuItemCallback:
SettingsManager settingsManager = new ShellSettingsManager(this); SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration);
Это вызывает конструктор #ctor, и передает ссылку на VSPackage в качестве параметра IServiceProvider. Конструктор возвращает объект SettingsManager. Метод GetReadOnlySettingsStore возвращает именованный объект SettingsStoreConfigurationSettingsStore. Используйте этот объект для чтения параметров конфигурации.
Добавьте эти линии выберите линий в предыдущем шаге:
bool isVisualWebDevInstalled = configurationSettingsStore.CollectionExists("InstalledProducts\\Visual Web Developer"); string message = "Visual Web Developer Installed: " + isVisualWebDevInstalled;
Это ищет в хранилище параметров конфигурации для коллекции InstalledProducts, разработчик Интернета вложенной коллекции визуально. Если вложенная коллекция найдена, то строка сообщения имеет значение «true»; в противном случае имеет значение «false».
При вызове MessageBox, замените значение параметра «SettingsStorage» с именем «message». Метод MenuItemCallback теперь должен выглядеть следующим образом:
private void MenuItemCallback(object sender, EventArgs e) { SettingsManager settingsManager = new ShellSettingsManager(this); SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration); bool isVisualWebDevInstalled = configurationSettingsStore.CollectionExists("InstalledProducts\\Visual Web Developer"); string message = "Visual Web Developer Installed: " + isVisualWebDevInstalled; IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(0, ref clsid, message, //was "SettingsStorage", //string.Format(CultureInfo.CurrentCulture, //"Inside {0}.MenuItemCallback()", //this.ToString()), string.Empty, 0, //OLEMSGBUTTON.OLEMSGBUTTON_OK, //OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, //OLEMSGICON.OLEMSGICON_INFO, 0, // false out result)); }
Нажмите клавишу F5, чтобы запустить экспериментальном экземпляре Visual Studio.
В экспериментальном экземпляре, в меню Сервис, нажмите кнопку хранение параметров.
Сообщение должно отображаться и содержать текст Visual Web Developer установлен: выполните Истина или Ложь.
Закройте экспериментальном экземпляр.
Visual Studio реализует хранилище параметров в системном реестре. Вследствие этого, можно использовать редактор реестра (Regedit.exe, например, для проверки конфигурации и параметров пользователя.
Использовать редактор реестра для проверки параметров конфигурации
Открытие Regedit.exe или другой редактор реестра.
Перейдите к HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0Exp_Config\InstalledProducts\.
Примечание
Убедитесь, что перед вами ключи, содержащие \10.0Exp_Config\, а не \10.0_Config\.При запуске экспериментальном экземпляре Visual Studio, параметры конфигурации в кусте «10.0Exp_Config» реестра.
Разверните узел \Installed Products\. Если сообщение в предыдущих шагах Visual Web Developer установлен: Да, тогда \Installed Products\ должен содержать узел Visual Web Developer. Если сообщение Visual Web Developer установлен: Нет, тогда \Installed Products\ не должен содержать узел Visual Web Developer.
Можно также использовать метод CollectionExists для определения установленна, является ли указанная служба. Необходимо знать тип класса службы.
Определить, является ли служба недоступна
В программном коде замените IsVisualWebDevInstalled и операторы назначения сообщения со следующими линиями.
string helpServiceGUID = typeof(SVsHelpService).GUID.ToString("B").ToUpper(); bool hasHelpService = configurationSettingsStore.CollectionExists("Services\\" + helpServiceGUID); string message = "Help Service Available: " + hasHelpService;
Это ищет в хранилище параметров конфигурации для служб коллекций, который содержит вложенную коллекцию GUID с именем службы. Если вложенная коллекция найдена, то строка сообщения имеет значение «true»; в противном случае имеет значение «false».
Нажмите клавишу F5, чтобы запустить экспериментальном экземпляре Visual Studio.
В экспериментальном экземпляре, в меню Сервис, нажмите кнопку хранение параметров.
Сообщение должно отображаться и содержать текст Доступные службы. выполните Истина или Ложь. При проверке этого параметра, можно использовать редактор реестра, как показано в предыдущих шагах.
Закройте экспериментальном экземпляр.
Можно также использовать методы и GetSubCollectionNamesGetString для перечисления службы, которые зарегистрированы в хранилище параметров конфигурации.
Список доступных служб
Замените код в предыдущих шагах со следующими линиями.
string message = "First five services:\n"; IEnumerable<string> collection = configurationSettingsStore.GetSubCollectionNames("Services"); int n = 0; foreach (string service in collection) { if (n++ == 5) break; message += configurationSettingsStore.GetString("Services\\" + service, "Name", "Unknown") + "\n"; }
Вызов метода GetSubCollectionNames возвращает имена элементов коллекции. Вызов метода GetString возвращает сведения о свойствах Name каждого элемента. Если свойство Name не существует, то по умолчанию используется имя «unknown». Результирующие имена добавляются в строке сообщения.
Нажмите клавишу F5, чтобы запустить экспериментальном экземпляре Visual Studio.
В экспериментальном экземпляре, в меню Сервис, нажмите кнопку хранение параметров.
Сообщение должно отображаться и содержать следующий текст.
Первые пять служб:PL/SQLTypeSystemКомпилятор Microsoft Visual BasicSTestExecutionServiceСлужба ResX RefactorNotify
Список служб, может отличаться. Для проверки этих параметров можно использовать редактор реестра.
Закройте экспериментальном экземпляр.
Можно сбросить параметры конфигурации с помощью следующей процедуры.
Сбросить параметры конфигурации
Щелкните Запуск нажмите кнопку Все программы нажмите кнопку Microsoft Visual Studio 2010 SDK нажмите кнопку Сервис, а затем нажмите кнопку Сбросить экземпляр Microsoft Visual Studio 2010 экспериментальном.
Окно команд.
Подождите, пока Press any key to continue не возвращается, а затем нажмите клавиши, чтобы закрыть окно команды.
Использование хранилища параметров пользователей
В этом подразделе показано, как добавлять блокнот в Visual Studio как внешний инструмент, чтения и записи параметров пользователя хранилище.
Для отладки и повторите эту установку, необходимо иметь возможность создавать дампы внешние " сервис параметры ". Чтобы сделать это, необходимо сохранить исходные параметры, с помощью которых можно извлекать их при необходимости.
Сохранение настроек внешних инструментов
Открытие Regedit.exe или другой редактор реестра.
Перейдите к HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0Exp\External Tools\
Примечание
Убедитесь, что текущий ключ содержит \10.0Exp\, но не \10.0\.При запуске экспериментального экземпляра Visual Studio, параметры пользователя в кусте реестра «10.0Exp».
Щелкните правой кнопкой мыши подраздел \External Tools\ и выберите пункт Экспорт. Убедитесь, что выбран узел Выбранная ветвь.
Сохраните в результате внешний файл Tools.reg.
Получение внешних " сервис параметры "
Щелкните правой кнопкой мыши подраздел реестра \External Tools\ и выберите пункт Удалить.
Если диалоговое окно Подтверждение удаления раздела отображается, щелкните Да.
Щелкните правой кнопкой мыши внешний файл Tools.reg, нажмите кнопку Открыть с помощью и выберите пункт Редактор реестра.
Другое SettingsManager и методы WritableSettingsStore используются для определения и изменения параметров пользователя.
Использовать хранилище параметров пользователя
Откройте файл SettingsStoragePackage.cs в редакторе кода.
В методе MenuItemCallback добавьте эта строка кода непосредственно после оператора присваивания ConfigurationSettingsStore:
WritableSettingsStore userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
Вызов метода GetWritableSettingsStore возвращает именованный объект WritableSettingsStoreuserSettingsStore. Этот объект используется для чтения и записи параметров пользователя.
После того как линии на предыдущем шаге, добавляют эта линия.
int toolCount = userSettingsStore.GetInt32("External Tools", "ToolNumKeys");
Вызов метода GetInt32 ищет в хранилище параметров пользователя для внешних средств коллекции и возвращает данные свойства 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; } }
Последовательные вызовы метода GetString возвращают данные свойств ToolCmd0, ToolCmd1 и т д Каждый сведения о свойстве путь внешнего инструмента. Вызов метода IndexOf выполняет поиск без учета регистра пути команды для строки «блокнот». Если обнаружено, hasNotepad имеет значение true; в противном случае оно остается false.
После того как линии на предыдущем шаге, добавляют следующие линии и заменить оператор присвоения строки сообщения, а все остальные выписки в конец foreach закрепляют цикла.
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); }
Этот код использует методы SetString и SetUInt32 чтобы создать различные свойства, установят блокнот как внешнее средство. Блокнот что клавиши доступа «n», а каталог проекта в качестве начального каталога. Наконец, число внешних средств увеличивается и записывается обратно в хранилище параметров пользователя.
Внешние средства " блокнот " теперь доступен для проверки.
Внешняя программа установки средств тестирования
Нажмите клавишу F5, чтобы запустить экспериментальном экземпляре Visual Studio.
В экспериментальном экземпляре, в меню Сервис, нажмите кнопку хранение параметров.
Сообщение должно отображаться и содержать текст Параметр "блокнот ". Нажмите кнопку ОК.
В меню Сервис, нажмите кнопку Блокнот.
Откройте блокнот.
После открытых приложение " блокнот ", закройте ее.
В меню Сервис, нажмите кнопку Блокнот попытку.
Сообщение должно отображаться и содержать текст Компонент "блокнот "уже.
Закройте блокнот, а затем закройте экспериментальном экземпляр.
Чтобы пройти этот тест, сначала восстановите затронутые параметры пользователя, как описано ранее в «для получения внешних сервис параметры».
Использование хранилища параметров из другого процесса
Это пошаговое руководство является первым, отображаемое как создать диспетчер параметров (объект SettingsManager ), с помощью VSPackage в качестве поставщика услуг.
SettingsManager settingsManager = new ShellSettingsManager(this);
VSPackages выполняются в одном процессе, как Visual Studio, но можно также перейти к хранилищу параметров из другого процесса с помощью класса ExternalSettingsManager.
Для создания диспетчера параметров из другого процесса, вызовите метод CreateForApplication и передайте ему полный путь к исполняемому файлу Visual Studio (devenv.exe). Поскольку Visual Studio не имеющий стандартное местоположение необходимо проверять реестру системы, чтобы найти путь. Эта информация отображается в подразделе HKLM\SOFTWARE\Microsoft\VisualStudio\версия\InstallDir\.
Например, для доступа к хранилищу параметров для Visual Studio 2010, просмотрите HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\InstallDir\.
Примечание
Для 64-разрядной операционной системы windows, этот подраздел реестра HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\InstallDir\.
Данные свойства \InstallDir\ Visual Studio 2010 обычно C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\.
Примечание
В 64-разрядной операционной системе Windows эти данные обычно C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\.
Полный путь создается путем добавления devenv.exe к этим данным, например
string AppIDPath = "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"
Наконец, вызовите CreateForApplication для создания диспетчера параметров.
SettingsManager settingsManager = ExternalSettingsManager.CreateForApplication(AppIDPath);