2014-09-23 2 views

ответ

4

Нет. На самом деле это не предназначено для того, чтобы быть документом - настройки не всегда самодокументированы, поэтому преобразование в другой формат не обязательно поможет.

Однако, несмотря на внешний вид, на самом деле это довольно простой формат файла - это XML-файл пар имя/значение. Так может быть обработан с помощью инструмента или плагина.

ОБЯЗАТЕЛЬНОЕ ПРИМЕЧАНИЕ: Нет необходимости знать это, чтобы использовать, потреблять или обмениваться настройками. Это все детали реализации ...

Файл на самом деле является файлом XAML, сериализованным как WPF ResourceDictionary (хотя он рассматривается как простой XML внутри). Каждая запись представляет собой строку, логическую или любую другую. Атрибут x:Key предоставляет иерархический ключ с именами в иерархии, разделенными символом /. Например .:

<s:String x:Key="/Default/PatternsAndTemplates/LiveTemplates/Template/=0F88A1C6C451B448B99CFE316153B889/Description/@EntryValue">Description of a live template</s:String> 

Это запись в следующей иерархии:

/ 
--Default 
    --PatternsAndTemplates 
    --LiveTemplates 
     --Template 
     --=0F88A1C6C451B448B99CFE316153B889 
      --Description 

Это иерархия вы видите, когда вы выбираете для экспорта данных из диалогового окна «Управление Options». Каждая запись поступает из класса настроек, определенного в ReSharper, кроме записи, начинающейся с знака равенства =. Этот символ означает, что эта запись указана из «индексированного значения», что означает, что сегмент Template на самом деле представляет собой список элементов, каждый из которых имеет значение со значением, в данном случае ориентиром, но может быть равным простым именем строки.

Таким образом, сегмент Template может содержать ряд этих направляющих записей, по одному для каждого живого шаблона, определенного в файле настроек. И это руководство по-прежнему остается еще одним путем в иерархии - каждый шаблон guid может иметь записи под ним, такие как сегмент Description.

Записи, начинающиеся с символа @, представляют собой записи метаданных, например. @EntryValue означает, что значение элемента XML является значением параметра, поэтому значение Description/@EntryValue является значением описания. Существуют другие значения метаданных, такие как @EntryIndexedValue для простых индексированных значений, @KeyIndexDefined, чтобы показать, что существует индекс или @EntryIndexRemoved, чтобы показать, что значение из другого файла (возможно, настройки по умолчанию, например предварительно настроенные живые шаблоны) было удалено.

Для каждой записи можно получить небольшое текстовое описание. Классы, поддерживающие записи параметров внутри ReSharper, украшены атрибутами, которые предоставляют краткое описание ключа и значений. Вы можете посмотреть классы, украшенные SettingsKeyAttribute. Например .:

[SettingsKey(typeof(Missing), "Libraries of templates and patterns")] 
public class PatternsAndTemplatesSettingsKey 
{ 
} 

Это определяет PatternsAndTemplates часть вышеуказанного пути (название происходит по соглашению, сбросив любой Settings или SettingsKey суффикс).

typeof(Missing) определяет ключ родительских настроек в иерархии. Здесь просто используется System.Reflection.Missing, чтобы указать, что родителя нет (/Default в пути - это «точка монтирования» для данных, позволяющая использовать параллельные иерархии в системе настроек).

Дочерние сегменты в пути также обозначаются как классы, обозначенные SettingsKeyAttribute, а значения - это общедоступные поля, помеченные SettingsEntryAttribute или SettingsIndexedEntryAttribute.

[SettingsIndexedKey(typeof(LiveTemplatesSettings), "Single template", typeof(GuidIndex))] 
public class TemplateSettings 
{ 
    [SettingsEntry(null, "Template shortcut")] public string Shortcut; 
    [SettingsEntry(null, "Template description")] public string Description; 
    [SettingsEntry(null, "Template text")] public string Text; 
    [SettingsEntry(false, "Template is disabled")] public bool IsDisabled; 
    [SettingsEntry(false, "Reformat after expansion")] public bool Reformat; 
    [SettingsEntry(false, "Shorten qualified references")] public bool ShortenQualifiedReferences; 
    [SettingsEntry(false, "Is invisible")] public bool IsInvisible; 
    [SettingsIndexedEntry("Categories")] public IIndexedEntry<string, string> Categories; 
    [SettingsIndexedEntry("Custom properties")] public IIndexedEntry<string, string> CustomProperties; 
    [SettingsIndexedEntry("Template applicability")] public IIndexedEntry<TemplateApplicability, bool> Applicability;  
} 

И каждый атрибут включает в себя краткое описание самого поля. (Начальное значение в конструкторе SettingsEntryAttribute является «значением по умолчанию», но оно не используется таким образом. Фактически это значение, которое будет использоваться, если система настроек еще не инициализирована. Она используется, пожалуй, в двух местах в базе данных ReSharper, и поэтому не следует полагаться на правильность).

Кроме того, в ReSharper встроен встроенный инструмент, который позволяет вам перемещаться и исследовать систему настроек. Запустите devenv.exe /ReSharper.Internal и перейдите к ReSharper -> Internal -> Windows -> SettingsStoreView. Это внутренне, поэтому не ожидайте отполирования и предупреждайте, что есть ошибки ...

Смежные вопросы