管理和共享 ReSharper 设置
ReSharper 使用分层设置机制保存您的偏好设置,该机制提供以下优势:
您可以在不同的解决方案中拥有不同的设置。
您可以在不同的位置保留偏好的不同子集,并在处理特定解决方案时将它们组合起来。 例如,您可以将符号图标的个人偏好和代码格式的团队偏好保存在不同的设置文件中,并自动组合这些偏好。
您可以通过将特定的设置子集保存在 VCS 下,与团队同步偏好设置。 ReSharper 提供了一个默认选项,将团队偏好保存在一个单独的文件中,该文件保存在解决方案文件夹中,可以轻松添加到您的 VCS。 如果其他团队成员使用 ReSharper,从 VCS 拉取更改后,该文件中的设置将自动应用,无需重新启动 Visual Studio 或重新加载解决方案。
由于任何设置子集都可以保存在文件中并动态更新,您可以通过多种方式共享您的 ReSharper 偏好设置。 例如,您可以将个人偏好保存在 Dropbox 中,并在不同的机器上使用它们。
来自不同设置文件的偏好设置以层的形式应用,因此如果同一设置在不同设置文件中有不同的值,将使用“上层”的值。 这使您可以覆盖特定设置文件中定义的设置,而无需更改该文件中的设置。
请参考以下示例:
假设您更喜欢使用 BSD 风格的大括号,并将此格式偏好保存在您的个人设置中。 但随后您开始处理一个特定的解决方案,该解决方案按照约定使用 GNU 风格的大括号——ReSharper 允许您更改相应的格式偏好,并将其保存在特定于解决方案的设置层中,以便覆盖您的个人偏好,并在您处理该解决方案时应用。 当您打开另一个解决方案时,您的个人偏好将再次应用。
默认设置和设置层
开箱即用,ReSharper 提供了一组默认的偏好设置,这些设置基于 .NET 世界中的约定和最佳实践。 这些默认设置是硬编码在产品中的,如果需要,您可以随时重置为默认值。 如果您更改了任何设置,您的更改将保存在设置层中,ReSharper 会应用它以覆盖相应的默认设置。 最初,ReSharper 提供了三个层,您可以在其中保存您的偏好设置: 此计算机、 解决方案团队共享 和 解决方案个人。
“此计算机”层
此设置层专用于您的个人全局设置,并适用于您本地计算机上的所有解决方案。
相应的设置文件保存为: %APPDATA%\JetBrains\Shared\vAny\GlobalSettingsStorage.DotSettings
“解决方案团队共享”层
此层专用于强制执行当前解决方案的团队偏好设置,例如 命名样式、 格式规则等。 此层中的设置会覆盖 此计算机 层中的设置。
相应的设置文件 <SolutionName>.sln.DotSettings 保存在解决方案文件夹中。
一旦此文件被添加到您的 VCS 中并被团队成员获取,他们将无需重新加载解决方案即可自动应用此文件中的设置。
“解决方案个人”层
此层允许您覆盖团队共享设置而无需更改它们。 如果您需要某些设置仅在此解决方案中应用且独立于您的团队,您可能会发现此功能很有用。
相应的设置文件 <SolutionName>.sln.DotSettings.user 保存在解决方案文件夹中。 您不应将其添加到您的 VCS 中。
请参见下图。 您可以看到,最初所有设置层都是空的,因此 ReSharper 可以“透过它们”并应用默认设置:

实际上,最初设置层文件并不存在,它们是在您修改并保存某些设置时首次创建的。 但如果设置文件存在,对于所有未在其中定义的设置,它仍然是“透明的”。
保存和覆盖设置
每次您在 ReSharper 选项 对话框中更改某些设置时,对话框底部会显示一条包含未保存设置数量的消息。

要应用更改,您应使用其中一个按钮保存它们:
保存(智能保存)
这适用于“智能保存”逻辑。
使用它可以保存您的修改并保持团队共享层和/或自定义层(如果有)不受影响。 换句话说,如果您只想保存更改而不需要考虑设置层,请使用 保存。
保存 将您的更改保存到“此计算机”设置层,然后——如果在“解决方案团队共享”和/或自定义层中有其他修改设置的值——这些更改也将保存到“解决方案个人”层以覆盖其他层中的值。
请参见下图中的示例。 假设您更改了三个设置,并将值从“蓝色”改为“绿色”;这些更改被保存到“此计算机”层。 然后,您的团队决定在团队共享解决方案中将设置 A 和 C 的值设为“黄色”,因此这些值由团队负责人保存到“解决方案团队共享”层中,ReSharper 在您从 VCS 拉取更改后立即应用了它们。 最后,您意识到您更喜欢设置 A 的“绿色”值,并再次更改并保存了它,这次它也被保存到“解决方案个人”层中,这使您能够在不更改团队共享层的情况下应用所需的值:

保存到(保存到特定层)
您需要使用这些命令将修改后的设置保存到“解决方案团队共享”层或自定义层。 如果您出于某些目的需要,也可以将修改保存到任何其他层。
将设置保存到特定层的唯一问题是,如果在堆栈中更高的层中以其他值定义了相同的设置,则它可能不会被应用。 下图显示了我们尝试在“此计算机”层中将设置 C 更改为“红色”以及为什么最终设置未能更改的原因。

管理设置层
默认情况下,您可以使用“解决方案团队共享”层按解决方案共享 ReSharper 设置——您需要做的唯一事情是将 *.dotSettings 文件置于版本控制之下。
如果您希望以其他方式共享设置,您需要学习如何创建新的设置层、导入和导出它们。 为此,ReSharper 提供了“设置层”对话框,可在 Visual Studio 菜单( )和 ReSharper 选项 对话框中(通过单击 管理 按钮)使用。

自定义设置层被添加到现有默认层之下。 例如,如果您希望自定义层中的设置适用于所有解决方案,请将其添加到“此计算机”层之下;否则,根据您是否希望它覆盖团队共享设置,将其添加到特定于解决方案的层之一之下。
一旦添加了自定义设置层,它会出现在 保存到 选择器中的 ReSharper 选项 对话框中,您可以使用它将修改后的设置保存到自定义层。 您还可以通过 编辑此层来修改此层中的设置。
添加自定义设置层
在 设置层 对话框中,选择一个您希望添加层的默认层。
执行以下操作之一:
单击 添加层
,然后单击 创建设置文件 以创建一个新的空设置层,或单击 打开设置文件 以从文件系统或任何 URI 包含一个现有的设置层。右键单击并在 添加层 选择器中选择相应的命令之一。
根据所选命令,指定新设置层文件的名称和位置,或选择具有 .DotSettings 扩展名的现有设置层文件。
添加的层中的设置根据其在层堆栈中的位置应用,您可以在 设置层 对话框中看到,也就是说,如果某些设置在上层中定义,则最终设置中使用上层的值。 如果需要,您可以使用 上移 和 下移 按钮在组内重新排列自定义设置层,这些按钮在您选择层时可用。
作为使用 保存到 按钮在 ReSharper 选项 对话框中将修改后的设置保存到特定层的替代方法,您可以打开特定的设置层进行编辑。
编辑特定的设置层
在 设置层 对话框中,选择您想要编辑的设置层。
执行以下操作之一:
单击 编辑层
。右键单击并在上下文菜单中选择 编辑。
双击所需的层。
打开 选项 对话框,其中显示了层的名称及其位置,位于对话框顶部:

请注意,您在此模式下看到的设置值要么取自默认值,要么取自编辑层中定义的值。 如果某个设置未在编辑层中定义,则显示默认设置中的值(例如下图中“设置 B”的值为“蓝色”)。
如果在这种情况下,您需要将“蓝色”值保存到编辑层的“设置 B”中,您需要先用其他值保存设置,然后再次编辑并保存为所需的值。

根据需要编辑层中的设置,然后单击 保存 以保存更改。
您可以将任何设置层中的特定设置子集导出到一个新的设置文件。 然后可以在另一个 ReSharper 实例上使用此文件来应用这些设置。
将设置从设置层导出到文件
在 设置层 对话框中,选择应导出设置的设置层。
执行以下操作之一:
在工具栏上,单击 导入/导出自
,然后单击 导出到文件。右键单击该层,并在上下文菜单中选择 导出到文件。
在打开的 导出到文件 对话框中,指定要导出的设置组,然后单击 确定 ,接着指定设置层文件的名称和位置。
作为 添加自定义设置层的替代方法,您可以将此自定义层中的设置子集复制到现有的默认层或自定义层之一。
从设置层文件导入设置到设置层
在 设置层 对话框中,选择您希望导入设置的设置层。
执行以下操作之一:
在工具栏上,单击 导入/导出设置
。 根据要导入的文件位置,单击 从文件导入 或 从 URL 导入。右键单击该层。 在上下文菜单中单击 导入自 ,然后单击 从文件导入 或 从 URL 导入。
指定要导入的文件位置。 请注意,如果您选择从 URL 导入,则文件路径应以 UNC 格式指定。
在打开的 从文件导入 对话框中,指定要导入的设置组,然后单击 确定。
ReSharper 还允许您将设置子集从一个挂载的设置层复制到另一个。
将设置从一个层复制到另一个层
在 设置层 对话框中,选择您希望复制设置的设置层。
执行以下操作之一:
在工具栏上,单击 将设置复制到
,然后选择目标设置层。右键单击该层,在上下文菜单中选择 将设置复制到 ,然后选择目标设置层。
在打开的 复制到 对话框中,指定要复制的设置组,然后单击 确定。
如有必要,您可以清除保存在特定层中的所有设置。 为此,右键单击该层,并在上下文菜单中单击 重置。
此外,您可以重置所有预定义层中的设置并卸载所有自定义设置层,从而将所有设置恢复为默认值。 为此,请单击工具栏上的 重置所有设置
。
您还可以通过清除旁边的复选框暂时禁用自定义设置层,或右键单击特定的自定义设置层并选择上下文菜单中的 删除 来卸载它。
将设置升级到新版本
有时,ReSharper 的新版本可能会对设置的存储格式进行修改。 在这种情况下,受影响的设置文件会在新版本首次启动时自动升级——ReSharper 只是将修改后的格式设置添加到设置文件中。 它还会添加一个条目,说明已升级的内容,以防止进一步升级。 例如:
然而,即使设置文件已升级,它仍然可以与旧版本的 ReSharper 一起使用(例如,如果您与未升级的团队成员共享此文件),因为已弃用的设置既不会更改也不会被移除。 其中包括,您可以在自动升级的 .dotSettings 文件中 安全地提交更改到您的 VCS。
这里需要注意的是,当您在更新后回到旧版本,然后使用该旧版本更改某些设置,再返回新版本时——ReSharper 不会再次升级设置。 因此,您更改的一些设置可能会以旧格式保存,并且无法被新版本读取。
因此,如果您(或您的团队)同时使用两个不同版本的 ReSharper,您可能需要检查在一个版本中修改的偏好设置是否能在另一个版本中正确读取,如果不能,只需在另一个版本中再次进行相同的修改。