从代码创建依赖项关系图

若要可视化软件系统的高级逻辑体系结构,请在Visual Studio中创建 dependency 关系图。 若要确保代码与此设计保持一致,请使用依赖项关系图验证代码。 可以为 Visual C# 和Visual Basic项目创建依赖项关系图。 若要查看 Visual Studio 哪些版本支持此功能,请参阅 版本对体系结构和建模工具的支持

创建依赖项关系图

通过依赖项关系图,可以将Visual Studio解决方案项组织成逻辑的抽象组,称为 layers。 可以使用层来描述这些项目执行的主要任务或系统的主要组件。

每个层可能包含描述更详细任务的其他层。 还可以指定层之间的预期或现有 依赖项 。 这些依赖项(表示为箭头)显示使用或可以使用其他层表示的功能的层。 若要维护代码的体系结构控制,请显示关系图上的预期依赖项,然后根据关系图验证代码。

视频:实时验证体系结构依赖项

创建依赖项关系图

在创建依赖项关系图之前,请确保解决方案具有建模项目。

Important

不要将现有依赖关系图添加、拖动或复制到另一个建模项目或解决方案中的其他位置。 这将保留原始关系图中的引用,即使更改关系图也是如此。 这也可以防止层验证正常工作,并且可能会在尝试打开关系图时导致其他问题,例如缺少元素或其他错误。

而是向建模项目添加新的依赖项关系图。 将源关系图中的元素复制到新关系图。 保存建模项目和新依赖项关系图。

向建模项目添加新的依赖项关系图

注释

.NET Core项目的依赖关系图从Visual Studio 2019版本16.2开始得到支持。

  1. 右键单击解决方案资源管理器中的建模项目,然后选择 Add>New Item

  2. 在“ 添加新项 ”窗口中,选择 “依赖项验证关系图”,在窗口底部输入关系图的名称,然后选择“ 添加”。

请从代码图中拖放或复制粘贴

  1. 使用 “体系结构 ”菜单为解决方案生成代码映射。

  2. 如果只想在代码示例中强制实施依赖项,请考虑应用代码映射筛选器来删除解决方案文件夹和“测试资产”。

  3. 在生成的代码映射上,删除“外部”节点,或将其展开以显示外部程序集,具体取决于是否要强制实施命名空间依赖项。 从代码图中删除不需要的程序集。

  4. 依赖项验证关系图 项添加到解决方案中的依赖项验证项目。

  5. 选择代码图上的所有节点(使用 Ctrl + A,或使用橡皮带选择,方法是在单击、拖动和释放之前按 Shift 键)。

  6. 将所选元素拖放或复制并粘贴到新的依赖项验证关系图。

  7. 这显示了当前的应用体系结构。 决定希望体系结构是什么,并相应地修改依赖项关系图。

显示从代码图生成的依赖项关系图的屏幕截图。

从工件创建层

可以从Visual Studio解决方案项(如项目、代码文件、命名空间、类和方法)创建层。 这会自动在层和项之间创建链接,包括在层验证过程中。

可以将层链接到不支持验证的项目,例如Word文档或PowerPoint演示文稿。 这样,便可以将层与规范或计划相关联。 还可以将层链接到跨多个应用共享的项目中的文件,但验证过程不包括这些层,这些层以泛型名称(如“第 1 层”和“第 2 层”)显示。

若要查看链接项是否支持验证,请打开 “层资源管理器” 并检查该项的 “支持验证 ”属性。 请参阅 “管理链接到工件”

目的 按照以下步骤作
为单个工件创建层
  1. 将项从这些源拖到依赖关系图上。
    层显示在结构图上,并链接到工件。
  2. 重命名层以反映关联代码或项目的责任。

重要: 将二进制文件拖到依赖项关系图不会自动添加对建模项目的引用。 手动将要验证的二进制文件添加到建模项目。 将二进制文件添加到建模项目
  1. 解决方案资源管理器 中,打开建模项目的快捷菜单,然后选择 Add Existing Item
  2. 在“ 添加现有项 ”对话框中,浏览到二进制文件,选择它们,然后选择 “确定”。 二进制文件显示在建模项目中。
  3. 解决方案资源管理器 中,选择添加的二进制文件,然后按 F4 打开 Properties 窗口。
  4. 在每个二进制文件中,将 “生成操作 ”属性设置为 “验证”。
为所有选定的项目创建单个层 同时将所有项目拖到依赖项关系图。

图中的一个层出现,并链接到所有的工件。
为每个所选项目创建一个层 按住 Shift 键,同时将所有项目拖动到依赖项关系图。
注意: 如果使用 SHIFT 键选择一系列项目,请在选择项目后释放该键。 再次拖动构件到关系图时按住不放。

每个工件的层显示在关系图上,并链接到每个工件。
向层添加工件 将工件拖到层。
创建新的未链接层 工具箱中,展开 “依赖项关系图 ”部分,然后将 拖到依赖项关系图。

若要添加多个层,请双击该工具。 完成后,选择 “指针 ”工具或按 ESC 键。

- 或 -

打开依赖项关系图的快捷菜单,选择 “添加”,然后选择“ ”。
创建嵌套层 将现有层拖到另一层。

- 或 -

打开层的快捷菜单,选择 “添加”,然后选择“ 图层”。
创建包含两个或多个现有层的新层 选择图层,打开所选内容的快捷菜单,然后选择 成组
更改层的颜色 将其 Color 属性设置为所需颜色。
指定与层关联的项目不应属于指定的命名空间 在层的 “禁止命名空间” 属性中键入命名空间。 使用分号 (;) 分隔命名空间。
指定与层关联的项目不能依赖于指定的命名空间 在层的 “禁止命名空间依赖项 ”属性中键入命名空间。 使用分号 (;) 分隔命名空间。
指定与层关联的项目必须属于指定命名空间之一 在层的 必需命名空间 属性中键入命名空间。 使用分号 (;) 分隔命名空间。

层上的数字指示链接到该层的项目数。 但是,读取此数字时,请记住:

  • 如果层链接到包含其他项目的项目,但该层不直接链接到其他项目,则数字仅包含链接的项目。 在层验证期间包含其他工件以供分析。

    例如,如果层链接到单个命名空间,则链接的项目数为 1,即使命名空间包含类也是如此。 如果该层还具有命名空间中每个类的链接,则该数字将包括链接类。

  • 如果层包含链接到项目的其他层,则容器层也会链接到这些项目,即使容器层上的数字不包括这些项目。

管理层和工件之间的链接

  1. 在依赖项关系图上,打开层的快捷菜单,然后选择 “查看链接”。

    层资源管理器 显示所选层的项目链接。

  2. 使用以下任务管理这些链接:

目的 在层资源管理器中
删除层与工件之间的链接 打开项目链接的快捷菜单,然后选择“ 删除”。
将链接从一个层移到另一层 将工件链接拖到图表上的现有层。

- 或 -

1.打开项目链接的快捷菜单,然后选择“ 剪切”。
2. 在依赖项关系图上,打开层的快捷菜单,然后选择“ 粘贴”。
将链接从一个层复制到另一层 1.打开项目链接的快捷菜单,然后选择“ 复制”。
2. 在依赖项关系图上,打开层的快捷菜单,然后选择“ 粘贴”。
从现有工件链接创建新层 将工件链接拖到图表上的空白区域。
验证链接的项目是否支持对依赖项关系图进行验证。 查看工件链接的支持验证列。

反向工程现有依赖项

只要与一个层关联的项目具有对与另一层关联的项目的引用,就存在依赖项。 例如,一个层中的类声明一个变量,该变量在另一层中具有类。 您可以对链接到图层的工件进行现有依赖项的反向工程。

注释

某些类型的工件无法对依赖项进行反向工程。 例如,不会对从或到链接到文本文件的层的依赖关系进行反向工程。 若要查看哪些项目具有可反向工程的依赖项,请打开一个或多个层的快捷菜单,然后选择 “查看链接”。 在 层资源管理器中,检查 “支持验证 ”列。 对于此列中显示为 False 的工件,不会对其依赖项进行反向工程。

  • 选择一个或多个层,打开所选层的快捷菜单,然后选择“ 生成依赖项”。

    如果看到一些不应存在的依赖项,可以编辑这些依赖项,使其与预期设计保持一致。

编辑层和依赖项以显示预期设计

若要描述你计划对系统或预期体系结构所做的更改,请编辑依赖项关系图:

目的 执行这些步骤
更改或限制依赖项的方向 设置 其 Direction 属性。
创建新的依赖项 使用 依赖关系双向依赖项 工具。

若要绘制多个依赖项,请双击该工具。 完成后,选择 “指针 ”工具或按 ESC 键。
指定与层关联的项目不能依赖于指定的命名空间 在层的 “禁止命名空间依赖项 ”属性中键入命名空间。 使用分号 (;) 分隔命名空间。
指定与层关联的项目不得属于指定的命名空间 在层的 “禁止命名空间” 属性中键入命名空间。 使用分号 (;) 分隔命名空间。
指定与层关联的项目必须属于指定命名空间之一 在层的 必需命名空间 属性中键入命名空间。 使用分号 (;) 分隔命名空间。

更改元素在关系图上的显示方式

可以通过编辑层的属性来更改层的大小、形状、颜色和位置或依赖项的颜色。

发现代码图上的模式和依赖项

创建依赖项关系图时,还可以创建 代码映射。 这些关系图有助于在浏览代码时发现模式和依赖项。 使用解决方案资源管理器、类视图或对象浏览器浏览程序集、命名空间和类 - 它们通常与现有层相对应。 有关代码映射的详细信息,请参阅: