如何将ReSharper的DotSettings文件转换为人类可读的文件?

时间:2014-09-23 01:11:49

标签: resharper

是否有工具/插件可以读取ReSharper的DotSettings文件,并创建一个包含DotSettings文件中嵌入的所有规则等的html / doc / pdf等?

1 个答案:

答案 0 :(得分:4)

没有。它并不是真正意图以这种方式成为文档 - 设置并不总是自我记录,因此转换为不同的文件格式并不一定有帮助。

然而,尽管出现了,它实际上是一种非常简单的文件格式 - 它是一个名称/值对的XML文件。因此可以使用工具或插件进行处理。

义务说明:无需了解此信息即可使用,使用或共享设置。这是所有实施细节......

该文件实际上是一个XAML文件,序列化为WPF ResourceDictionary(尽管它在内部被视为纯XML)。每个条目都是一个字符串,或布尔值或其他。 x:Key属性提供分层键,层次结构中的名称由/字符分隔。 E.g:

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

这是以下层次结构中的条目:

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

这是您选择从&#34;管理选项&#34;中导出数据时看到的层次结构。对话。每个条目都来自ReSharper中定义的设置类,除了以等号=开头的条目。此符号表示此条目来自&#34;索引值&#34;,这意味着Template段实际上是一个项目列表,每个项目都使用一个值键入,在本例中为guid,但同样可以是一个普通的字符串名称。

因此,Template段可以包含许多这些guid条目,每个条目对应于设置文件中定义的每个实时模板。而这个guid仍然只是层次结构中的另一条路径 - 每个模板guid都可以在其下面有条目,就像这里的Description段一样。

以at符号@开头的条目是元数据条目,例如@EntryValue表示XML元素的值是设置的值,因此Description/@EntryValue是描述的值。还有其他元数据值,例如@EntryIndexedValue表示索引存在,@KeyIndexDefined表示索引存在,@EntryIndexRemoved表示来自其他文件的值(可能是默认设置,例如pre - 已定义的实时模板)已被删除。

可以为每个条目获取小文本描述。支持ReSharper中的设置条目的类使用提供键的简短描述和值的属性进行修饰。您可以查找用SettingsKeyAttribute修饰的课程。 E.g:

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

这定义了上述路径的PatternsAndTemplates部分(名称是按惯例派生的,删除了任何SettingsSettingsKey后缀。

typeof(Missing)定义层次结构中的父设置键。在这里,它只是使用System.Reflection.Missing来表示没有父级(路径中的/Default是一个&#34;安装点&#34;对于数据,允许并行层次结构设置系统)。

路径中的子段也声明为标有SettingsKeyAttribute的类,值为公共字段,标有SettingsEntryAttributeSettingsIndexedEntryAttribute

[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构造函数中的初始值是&#34;默认值&#34;,但它没有像那样使用。它实际上是一个值,如果设置系统使用的话尚未初始化。它在ReSharper代码库中可能有2个位置使用,所以不应该依赖它是正确的。)

此外,ReSharper内置了一个内部工具,可让您浏览和调查设置系统。运行devenv.exe /ReSharper.Internal并导航至ReSharper - &gt;内部 - &gt; Windows - &gt; SettingsStoreView。它是内部的,所以不要期待抛光,并警告有bug ...