探索项目依赖关系图
使用 ReSharper,您可以在解决方案中探索项目依赖关系,并以可视化的方式展示解决方案架构。
架构视图将在新的编辑器选项卡中打开,允许以可视化方式探索项目依赖关系,并 比较 解决方案的当前状态与之前拍摄的快照。

打开项目依赖关系图
在 解决方案资源管理器 中,选择一个或多个项目、一个或多个解决方案文件夹或解决方案节点。
右键单击所选内容并选择 显示项目依赖关系图 或在主菜单中选择 。
架构视图将在新的文档选项卡中打开,显示您最初选择的项目的依赖关系。
最初选择的项目也会在 架构视图 的左侧部分中被选中,其中列出了所有解决方案项目。 您可以选中其他项目:它们将出现在图表中,并添加相应的链接。
如果需要,您可以使用工具栏中的 分组依据 选择器更改项目的分组方式:
无 - 所有项目均以未分组的方式显示。
解决方案文件夹 - 项目按 解决方案文件夹 分组。
文件结构 - 项目和解决方案文件夹按文件系统结构分组。
了解项目之间的链接
ReSharper 以两个步骤构建图表:
根据 项目引用 构建依赖关系图。
此步骤在您打开图表时自动完成,即使是大型解决方案也几乎不需要时间。
执行 耦合 分析以计算 在引用项目中的使用次数。
此步骤资源密集,可能需要几分钟,但它在后台运行。 分析的进度会显示在架构视图顶部的状态栏中。
耦合分析的状态对应于 启用耦合分析
按钮的状态。 耦合分析是一个资源密集型过程,可能会影响大型解决方案的性能。 如果您在使用图表时遇到任何延迟,您可以使用此按钮禁用耦合分析,根据需要调整图表,然后再次启用分析。 分析算法首先计算显示项目的耦合,然后处理视图中隐藏的项目。
图表中项目之间的链接可以通过以下方式显示:
线条样式 | 含义 |
|---|---|
黑色实线 | 表示两个节点之间存在项目引用。 当 耦合 分析正在进行或已禁用时使用这些线条,因此项目之间的使用次数未知。 |
特定宽度的蓝色实线 | 此引用的耦合分析已完成,并且在引用项目中至少存在一次使用。 线条的粗细表示引用项目的类型在引用项目中被使用的次数。 如果您将鼠标悬停在引用上,此数字会显示在工具提示中。 |
虚线 | 当耦合分析完成时出现,表示以下情况之一:
|
绿色实线 | 快照中缺少此引用,但它在解决方案中存在。 仅当 显示差异 |
红色实线 | 快照中存在此引用,但它在解决方案中缺失。 仅当 显示差异 |
显示和隐藏项目
您可以使用左侧相应项目的复选框在图表中显示或隐藏特定的解决方案项目(项目、文件夹、解决方案文件夹)。
此外,还有几种方法可以直接从图表区域显示/隐藏项目:
要在图表中选择某些项目并隐藏其他项目,请 Ctrl 单击您要选择的项目,然后右键单击所选内容并选择 选择 | 仅显示选定的模块。
要选择两个链接的项目,请右键单击它们之间的链接并选择 选择 | 仅显示选定的模块。
要隐藏某个项目,您可以在图表中选择它并按 Delete 。
另一种专注于特定项目的方法是显示依赖或引用的项目并隐藏所有其他项目。 为此,请选择一个或多个项目(项目或分组项目),右键单击所选内容并选择 显示此/这些及其依赖/引用。 请注意,这些命令仅隐藏不相关的项目,并不会添加当前隐藏的任何引用/依赖节点。
要显示特定项目引用或依赖的所有项目,即使这些项目当前在视图中隐藏,请选择一个或多个项目并选择 选择 | 添加引用/依赖模块。
如果需要,您可以通过单击 撤消
或按
Ctrl+Z
,逐步撤销在图表中所做的更改(显示/隐藏的项目)。 要撤销 撤消 命令,请单击 重做
或按
Ctrl+Y
。
平移和缩放图表
要平移和缩放图表,请使用图表区域左上角的控件。 或者,您可以使用触控板、滚动条,或在图表区域中点击图表项目外的任意位置并拖动,同时显示手形光标
。 您还可以使用鼠标滚轮进行缩放。
重新排列图表上的项目
图表布局会自动计算,但如果需要,您可以更改:所有项目都可以移动。 要移动项目,请先单击以选择它,然后在显示十字光标
时单击并拖动。
在图表上对项目进行分组
使用 分组依据 选择器,您可以按 解决方案文件夹 或文件系统结构对项目进行分组。 分组方式同时适用于左侧部分和图表。
如果需要,您可以通过以下方式在图表中折叠和展开分组项目:
单击分组项目左上角的向下箭头。 折叠后,符号会变为向上箭头,您可以单击它以展开项目。
在图表中选择一个分组项目并按 Ctrl + 左箭头 和 Ctrl + 右箭头 。
单击工具栏上的 收起图
和 展开图
以折叠或展开所有分组项目。
分析项目引用
要了解一个项目中类型在另一个项目中的使用情况,请选择项目之间的相应链接并按 Alt+F7 或右键单击并选择 显示用法。 ReSharper 将在 查找结果 窗口 中显示使用情况。
如果特定引用的耦合分析已完成,并且 ReSharper 将其标记为未使用(以虚线表示),您无需从图表切换即可删除未使用的引用——只需选择它并按 Control+Shift+R 或右键单击并选择 重构。 然后按 Alt+Delete 或单击 安全删除程序集引用。
检测可能的架构问题
如果您尝试遵循解决方案架构中的最佳实践,您的应用程序可能具有 分层结构 ,其中各层相互通信。
显示可能的路径
按钮允许您了解应用程序层是否设计正确,不仅在分组方面,还包括层之间的通信。 简而言之,当按钮开启时,您可以查看两个特定项目之间是否存在由当前视图中隐藏的其他引用项目组成的路径。 这些路径以绿色虚线显示。 仅当存在隐藏的中间项目可以链接当前显示的任意两个项目时,按钮才会启用。
为了说明其工作方式,请考虑以下示例:
假设我们有一个大型解决方案,现在正在分析由相应解决方案文件夹表示的“服务”架构层。 我们显示了我们感兴趣的两个项目,其他项目被隐藏:

这两个项目之间没有直接的项目引用,但是,如果我们启用 显示可能的路径
按钮,我们会看到这些项目之间通过其他项目存在路径: 
要查看这两个项目如何相互依赖,我们右键单击路径链接并选择 显示路径。 中间项目会出现在图表中,我们可以看到它们都位于另一个层中:

根据这些信息,我们可以看到应用程序结构可能需要重新设计。
将图表导出到文件
在探索依赖关系的任何时候,您都可以使用以下工具栏按钮将图表导出到文件:
单击 导出图表
。 在打开的 另存为 对话框中,您可以使用 保存类型: 选择器选择如何导出图表:
PNG — 将图表的当前视图导出为 PNG 图像。
XML 纸张规范 — 将图表导出为 XPS 格式,您可以使用该格式打印大型图表。
GraphML — 将图表导出为 GraphML 格式,您可以使用该格式进行外部分析或将其导入回 ReSharper。
导入图表
如果您有从 ReSharper 或其他工具导出的 GraphML 格式的图表,您可以导入它。 为此,请从主菜单中选择 或单击项目或类型依赖关系图中的 导入图
,然后选择带有图表的 *.graphml 文件。
将保存的快照与当前解决方案状态进行比较
您可以随时将解决方案当前状态的快照保存到文件中,以供将来参考。 为此,请单击工具栏上的 保存架构图
,然后选择保存快照文件的位置。
稍后,您可以通过在主菜单中选择 并选择图表快照文件 .argr 来加载和研究保存的快照。
快照将在新的编辑器选项卡中打开,您将能够看到解决方案当前状态与快照中保存的状态之间的差异。
如果从文件打开了依赖关系图, 显示差异
按钮将变为可用,并默认开启。 您可以使用此按钮显示或隐藏快照与当前解决方案状态之间的差异。
架构视图的工具栏控件
控件 | 名称 | 描述 |
|---|---|---|
分组依据 | 使用此列表选择分组 待办事项 项目的标准。 提供了几种选项:
| |
| 撤消 | 逐步撤销在图表中所做的更改(显示/隐藏的项目)。 |
| 重做 | 撤销上一次的撤销操作。 |
| 打开/关闭耦合分析 | 此切换按钮允许启用或禁用 耦合 分析,该分析在后台执行。 默认情况下,此按钮是开启的,并且在您打开新图表时分析会立即开始。 耦合分析是一个资源密集型过程,可能会影响大型解决方案的性能。 如果您在使用图表时遇到任何延迟,您可以使用此按钮禁用耦合分析,根据需要调整图表,然后再次启用分析。 分析算法首先计算显示项目的耦合,然后处理视图中隐藏的项目。 |
| 隐藏/显示传递引用 | 此切换按钮允许您显示项目之间的传递引用,这些引用默认隐藏,以简化图表而不丢失其架构结构。 例如,如果您有项目引用 |
| 保存架构图 | 将依赖关系快照保存到文件。 更多信息请参阅 探索项目依赖关系图。 |
| 显示差异 | 仅当视图中显示的快照与当前解决方案不同步时,此按钮才会启用。 单击此按钮以比较快照中的解决方案状态与当前状态。 |
| 收起图 | 折叠图表中的所有元素。 |
| 展开图 | 展开图表中的所有元素。 |
| 显示可能的路径 | 当按钮开启时,您可以查看两个特定项目之间是否存在由当前视图中隐藏的其他引用项目组成的路径。 这些路径以绿色虚线显示。 仅当存在隐藏的中间项目可以链接当前显示的任意两个项目时,按钮才会启用。 有关更多信息,请参阅 检测可能的架构问题。 |
| 导出为 PNG | 单击此按钮将图表的可见部分保存为 PNG 图像文件。 |