如何:对照层关系图验证 .NET 代码

本主题适用于:

Visual Studio 旗舰版

Visual Studio 高级专业版

Visual Studio 专业版

Visual Studio 学习版

主题适用 主题适用 主题不适用 主题不适用

对照层关系图验证代码有助于在代码演变过程中强制对代码实施体系结构约束。 执行此任务时,系统将对代码中的依赖项和关系图上的依赖项进行比较。 层验证还可以帮助您完成以下任务:

  • 查看现有代码和预期设计之间的不同。

  • 查找未按预期方式组织的或具有不需要的依赖项的代码。

  • 查找建议的更改可能会影响的依赖项。

    例如,可以编辑层关系图来显示潜在的体系结构更改,然后对代码进行验证以查看受影响的依赖项。 有关更多信息,请参见如何:从项目中创建层关系图层关系图:指南

  • 将代码重构或迁移到其他设计。

    查找在将代码移动到其他体系结构时仍需工作的代码或依赖项。

您的 Visual Studio 解决方案必须包括至少一个具有层关系图的建模项目,然后您才能验证代码。 层关系图描述系统的体系结构,并将命名空间、项目和其他项目组织到逻辑抽象组或层中。 这些层描述系统的主要组件或这些项目执行的任务。 必须定义这些层,将项目链接到这些层并描述项目之间的预期依赖项。

提示

有一些您可链接到层但不支持对照层关系图进行验证的项目类型。 若要确定项目是否支持验证,请打开“层资源管理器”以检查项目链接的“支持验证”属性。 有关更多信息,请参见不支持验证的项目。

有关如何创建层关系图的更多信息,请参见以下主题:

若要验证 C 或 C++ 代码,请下载并安装 Microsoft Visual Studio 2010 可视化和建模功能包

有关更多信息,请参见如何:对照层关系图验证 C 和 C++ 代码

主题内容

  • 手动添加程序集和项目以进行验证。

  • 随时手动验证代码。

  • 在本地生成期间自动验证代码。

  • 在 Team Foundation Build 期间自动验证代码。

  • 解决层验证问题。

手动添加程序集和项目以进行验证

建模项目内的**“层引用”**文件夹包含对验证期间分析的程序集和项目的引用。 当您将项目拖到层关系图上时,对对应程序集或项目的引用将自动添加到此文件夹中。 您也可以手动添加程序集和项目以进行验证,而无需将它们拖到层关系图上。

手动添加程序集和项目以进行验证

  1. 在**“解决方案资源管理器”中,右击建模项目或“层引用”文件夹,然后单击“添加引用”**。

  2. 在**“添加引用”对话框中,选择所需程序集或项目,然后单击“确定”**。

随时手动验证代码

从打开的层关系图中验证代码

  1. 右击关系图图面,再单击**“验证体系结构”**。

    提示

    默认情况下,层关系图 (.layerdiagram) 文件的“生成操作”属性设置为“验证”,以便在验证过程中包括关系图。

    **“错误列表”**窗口会报告发生的任何错误。 有关验证错误的更多信息,请参见了解层验证错误

  2. 若要查看每个错误的根源,请在**“错误列表”**窗口中双击相应错误。

    提示

    Visual Studio 可能会显示依赖项关系图,而不是显示错误的根源。 若代码所依赖的程序集不是由层关系图指定的,或代码缺少层关系图所指定的依赖项,则会出现此情况。 检查依赖项关系图或代码,以确定此依赖关系是否应存在。 有关依赖项关系图的更多信息,请参见如何:在关系图文档中浏览和导航

  3. 若要管理错误,请参见管理验证错误。

从命令提示验证代码

  1. 打开 Visual Studio 命令提示。

    若要打开命令提示,请单击**“开始”,依次指向“所有程序”“Microsoft Visual Studio 2010”“Visual Studio 工具”,再单击“Visual Studio 2010 命令提示”**。

  2. 选择以下选项之一:

    • 若要对照解决方案中的特定建模项目验证代码,请使用下面的自定义属性运行 MSBuild。

      msbuild <FilePath+ModelProjectFileName>.modelproj
      /p:ValidateArchitecture=true
      

      - 或 -

      浏览到包含建模项目文件 (.modelproj) 和层关系图的文件夹,然后使用下面的自定义属性运行 MSBuild:

      msbuild /p:ValidateArchitecture=true 
      
    • 若要对照解决方案中的所有建模项目验证代码,请使用下面的自定义属性运行 MSBuild:

      msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true 
      

      - 或 -

      浏览到必须包含建模项目(包含层关系图)的解决方案文件夹,然后使用下面的自定义属性运行 MSBuild:

      msbuild /p:ValidateArchitecture=true
      

    将列出发生的任何错误。 有关 MSBuild 的更多信息,请参见 MSBuildMSBuild 任务

有关了解验证错误的更多信息,请参见了解层验证错误

管理验证错误

在开发过程中,您可能需要在验证期间禁止显示报告的某些冲突。 例如,您可能希望禁止显示您已解决或与特定情形不相关的错误。 禁止显示错误时,最好在 Team Foundation 中记录工作项。

为验证错误创建工作项

  • 在**“错误列表”窗口中,右击错误,指向“创建工作项”**,然后单击要创建的工作项类型。

使用以下任务来管理**“错误列表”**窗口中的验证错误:

若要

请执行这些步骤

禁止在验证过程中显示选定的错误

右击一个或多个所选错误,指向“管理验证错误”,再单击“禁止显示错误”

禁止显示的错误在显示时均带有删除线格式。 在您下次运行验证时,这些错误将不会显示。

系统会在相应层关系图文件的 .suppressions 文件中对禁止显示的错误进行跟踪。

停止禁止显示选定的错误

右击所选的禁止显示的一个或多个错误,指向“管理验证错误”,然后单击“停止禁止显示错误”

在您下次运行验证时,这些所选的禁止显示的错误将会显示。

“错误列表”窗口中还原所有禁止显示的错误

“错误列表”窗口中的任意位置右击,指向“管理验证错误”,然后单击“显示所有禁止显示的错误”

“错误列表”窗口中隐藏所有禁止显示的错误

“错误列表”窗口中的任意位置右击,指向“管理验证错误”,然后单击“隐藏所有禁止显示的错误”

在本地生成期间自动验证代码

若您希望在每次运行本地生成时都自动验证代码,请使用此方法。

从本地生成中自动验证代码

  • 使用文本编辑器打开建模项目 (.modelproj) 文件,然后包括以下属性:
<ValidateArchitecture>true</ValidateArchitecture>

- 或 -

  1. 在**“解决方案资源管理器”中,右击包含层关系图或关系图的建模项目,再单击“属性”**。

  2. 在**“属性”窗口中,将建模项目的“验证体系结构”属性设置为“True”**。

    这将在验证过程中包括建模项目。

  3. 在**“解决方案资源管理器”**中,单击要用于验证的层关系图 (.layerdiagram) 文件。

  4. 在**“属性”窗口中,确保关系图的“生成操作”属性设置为“验证”**。

    这将在验证过程中包括层关系图。

有关了解验证错误的更多信息,请参见了解层验证错误。 若要管理错误,请参见管理验证错误。

在 Team Foundation Build 期间自动验证代码

为了帮助防止在代码中进行导致与预期设计相冲突的更改,请在使用 Team Foundation Build 运行的生成中包括层验证,并在封闭签入中包括层验证,这可通过创建自定义 MSBuild 任务来指定。 可以使用生成报告来收集验证错误。

有关 Team Foundation Build 的更多信息,请参见以下主题:

有关如何创建封闭签入生成的更多信息,请参见定义封闭签入生成以验证更改

运行 Team Foundation Build 时验证代码

  1. 在**“团队资源管理器”中,双击生成定义,再单击“进程”**。

  2. 在**“生成过程参数”下,展开“编译”,并在“MSBuild 参数”**参数中键入以下内容:

    /p:ValidateArchitecture=true

有关更多信息,请参见使用默认模板定义生成

不支持验证的项目

不支持对照层关系图进行验证的项目包括 C++ 项目、网站、Office 文档和纯文本文件。 可以将此类项目链接到层,但验证过程将会忽略它们。 如果引用的项目或程序集链接到单独的层,而且这些层之间没有依赖关系出现,则将不会出现验证错误。 除非代码使用此类引用,否则这些引用不被视为依赖项。

验证项目是否支持验证

  1. 在层关系图上,选择一个或多个层,右击所选的层,再单击**“查看链接”**。

  2. 在**“层资源管理器”中,查看“支持验证”**列。

    如果项目链接的该值为 false,则该项目不支持验证。

解决层验证问题

下表描述了层验证问题及其解决方法。 这些问题不同于代码与设计发生冲突而导致出现的错误。 有关这些错误的更多信息,请参见了解层验证错误

问题

可能的原因

解决方法

验证错误不按预期发生。

在解决方案资源管理器中,从同一建模项目中的其他层关系图复制的层关系图上,验证不起作用。 以这种方式复制的层关系图包含与原始层关系图相同的引用。

  1. 向建模项目中添加一个新的层关系图。

  2. 将源层关系图中的元素复制到新关系图。

请参见

概念

在开发过程中验证系统

其他资源

了解层验证错误