如何:对照层关系图验证 C 和 C++ 代码

更新:2010 年 12 月

利用此 Visual Studio 2010 功能包,您可以在代码演变过程中强制在 Visual Studio 2010 旗舰版中对 C 和 C++ 代码实施体系结构约束。 若要执行此任务,请定期运行层验证,对代码中的依赖项和层关系图上的依赖项进行比较。 层关系图描述系统的体系结构,并将命名空间、项目和其他项目组织到逻辑抽象组或层中。 这些层描述系统的主要组件或这些项目执行的任务。 若要为 C 或 C++ 代码创建层关系图,请遵循为 .NET 代码创建层关系图的相同步骤。 有关更多信息,请参见如何:从项目中创建层关系图Visual Studio 功能包

提示

您必须安装 Visual Studio 2010 功能包,才能使用此功能。

对于二进制文件,仅在二进制级别执行层验证。 虽然您可以将其他类型的项目链接到层关系图,但层验证仅分析二进制级别的依赖项。

层验证还可以帮助您完成以下任务:

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

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

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

    例如,可以修改层关系图来显示潜在的体系结构更改,然后对代码进行验证以查看受影响的依赖项。

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

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

本主题介绍在对 C 或 C++ 代码运行层验证之前必须满足的要求。

要求

  • 确保 Visual C# 随 Visual Studio 一起安装。

  • 创建包含层关系图的建模项目

  • 若要验证二进制文件依赖项,请将二进制文件添加到建模项目中。

  • 若要在 Team Foundation Build 上验证 C 和 C++ 项目,请参见 Team Foundation Build 要求。

满足这些要求之后,可遵循与 .NET 代码相同的步骤操作。 有关这些步骤,请参见如何:对照层关系图验证 .NET 代码。 有关与从 C 或 C++ 代码创建的建模项目和层关系图相关的问题,请参见疑难解答。

创建包含层关系图的建模项目

Visual Studio 解决方案必须包含一个具有层关系图的建模项目。

创建建模项目

  1. 在**“解决方案资源管理器”中右击顶级解决方案节点,指向“添加”,再单击“新建项目”**。

  2. 在**“添加新项目”对话框的“已安装的模板”下,单击“建模项目”,再单击“建模项目”**。

  3. 重命名该项目,然后单击**“确定”**。

    Visual Studio 将一个新的建模项目添加到解决方案中。

  4. 确保保存此建模项目。

创建层关系图

  1. 在**“体系结构”菜单上,单击“新建关系图”,然后在“添加新关系图”对话框中单击“层关系图”**。

  2. 重命名关系图,选择建模项目,然后单击**“确定”**。

    Visual Studio 将一个空白层关系图添加到建模项目中,然后显示此关系图。

  3. 从**“解决方案资源管理器”**中,将至少一个 C 或 C++ 项目拖动到层关系图图面上。

    - 或 -

    从**“体系结构资源管理器”**中,将至少一个二进制文件拖动到层关系图图面上。

    执行上述任一步骤的同时,还会自动将以下项添加到建模项目中:

    • 对建模项目的项目引用。

    • 建模项目文件 (.modelproj) 的 <Import> 元素,用于导入自定义 .targets 文件和对 C 或 C++ 代码启用层验证。

  4. 定义其他层,将项目链接到这些层并描述这些项目之间的预期依赖项。

    有关更多信息,请参见如何:从项目中创建层关系图层关系图:指南

  5. 确保保存此建模项目。

    重要说明重要事项

    如果您只保存层关系图,而不保存建模项目,然后关闭了解决方案,则必须为建模项目手动添加 C 或 C++ 项目引用,并导入自定义 .targets 文件。 有关更多信息,请参见疑难解答。

重要说明重要事项

在 Windows XP 或 Windows 2003 上,当在 Visual Studio 2010 旗舰版中从 C 或 C++ 代码创建层关系图时,将使用绝对路径在建模项目文件 (.modelproj) 中创建条目,以导入自定义 Microsoft.VisualStudio.Progression.NativeProvider.targets 文件。 如果您试图在 Windows 7、Windows Vista 或 Windows Server 2008 上打开解决方案,这可能会引发问题。 如果您正在 Windows XP 或 Windows 2003 上运行 Visual Studio 2010 旗舰版,则无法打开在 Windows 7、Windows Vista 或 Windows Server 2008 上的 Visual Studio 2010 旗舰版中创建的层关系图。 若要解决这一问题,请参见疑难解答。

向建模项目中添加二进制文件

若要验证二进制文件依赖项,则必须手动将需要验证的二进制文件添加到建模项目中。 在将这些二进制文件拖动到层关系图时不会自动添加它们。

将二进制文件添加到建模项目中

  1. 在**“解决方案资源管理器”中,右击建模项目,然后单击“添加现有项”**。

  2. 在**“添加现有项”对话框中,通过浏览找到并选择二进制文件,然后单击“确定”**。

    二进制文件将显示在建模项目中。

  3. 在**“解决方案资源管理器”中,单击已添加的二进制文件,然后按 F4 打开“属性”**窗口。

  4. 将每个二进制文件的**“生成操作”属性设置为“验证”**。

Team Foundation Build 要求

若要在 Team Foundation Build 服务器上验证 C 和 C++ 项目,则必须按照以下步骤操作:

  1. 若要编译项目,请确保服务器上已安装以下产品:

    提示

    如果在服务器上安装了 Visual Studio 2010 旗舰版,则可以将功能包安装在服务器上,而不用执行步骤 2 和 3。 否则,如果 …\<插入 Visual Studio 功能包名称>\<插入 Visual Studio 功能包版本号> 文件夹不存在于服务器上,则可能必须创建它。 除非您已在其他位置安装了功能包,否则 %LocalAppData% 通常为“驱动器名称:\Users\用户名\AppData\Local”。 在 Windows XP 或 Windows 2003 上,使用 %AppData% 而不使用 %LocalAppData%。

  2. 如果您安装了 Visual Studio 2010 可视化和建模功能包:

    从以下功能包安装位置将 Microsoft.VisualStudio.Progression.NativeProvider.targets 文件复制到服务器上的同一位置。

    %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<插入 Visual Studio 功能包名称>\1.0

    如果您安装了 Visual Studio 2010 功能包 2:

    从以下功能包安装位置复制 Microsoft.VisualStudio.Progression.NativeProvider.targets 文件:

    …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\<插入 Visual Studio 功能包名称>\<插入 Visual Studio 功能包版本号>

    复制到服务器上的以下位置:

    …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Modeling\<插入 Visual Studio 功能包名称>\1.0

  3. 根据已安装的功能包版本,从以下功能包安装位置复制 Microsoft.VisualStudio.Progression.NativeProvider.dll 文件:

    • Visual Studio 2010 可视化和建模功能包:%LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<插入 Visual Studio 功能包名称>\1.0

    • Visual Studio 2010 功能包 2:…\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\<插入 Visual Studio 功能包名称>\<插入 Visual Studio 功能包版本号>

    复制到以下服务器位置:

    …\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Providers

疑难解答

如果您只保存层关系图,而不保存建模项目,然后关闭了解决方案,则必须按照以下步骤,手动为建模项目添加 C 或 C++ 项目引用,并导入自定义 .targets 文件:

若要

请执行这些步骤

添加 C 或 C++ 项目引用

  1. “解决方案资源管理器”中,右击包含层关系图的建模项目,再单击“添加引用”

    - 或 -

    在建模项目中,右击“层引用”文件夹,然后单击“添加引用”

  2. “添加引用”对话框中,选择要验证的项目,然后单击“确定”

    项目引用将显示在“层引用”文件夹中。

导入自定义 .targets 文件

  1. “解决方案资源管理器”中,右击建模项目节点,然后单击“卸载项目”

  2. 右击建模项目节点,然后单击“编辑建模项目名称.modelproj”。

  3. 在建模项目名称.modelproj 文件中,找到以下 <Import> 元素:

    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets" />

    在此 <Import> 元素下,添加以下 <Import> 元素:

    如果您安装了 Visual Studio 2010 可视化和建模功能包:

    <Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<InsertVisualStudioFeaturePackName>\1.0\Microsoft.VisualStudio.Progression.NativeProvider.targets" />

    注意注意
    %LocalAppData% 通常为“驱动器名称:\Users\用户名\AppData\Local”。在 Windows XP 或 Windows 2003 上,使用 %AppData% 而不使用 %LocalAppData%。如果功能包已安装在其他位置,则改用该位置。您还可以从功能包安装位置将 Microsoft.VisualStudio.Progression.NativeProvider.targets 文件复制到包含建模项目的文件夹中。

    如果您安装了 Visual Studio 2010 功能包 2:

    <Import Project="…$\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\<InsertVisualStudioFeaturePackName>\<InsertVisualStudioFeaturePackVersionNumber>\Microsoft.VisualStudio.Progression.NativeProvider.targets" />

  4. 保存 .modelproj 文件,然后关闭它。

  5. 右击建模项目节点,然后单击“重新加载项目”

在 Windows XP 或 Windows 2003 上,当在 Visual Studio 2010 旗舰版中从 C 或 C++ 代码创建层关系图时,将使用绝对路径在建模项目文件 (.modelproj) 中创建条目,以导入自定义 Microsoft.VisualStudio.Progression.NativeProvider.targets 文件。 如果您试图在 Windows 7、Windows Vista 或 Windows Server 2008 上打开解决方案,这可能会引发问题。 如果您正在 Windows XP 或 Windows 2003 上运行 Visual Studio 2010 旗舰版,则无法打开在 Windows 7、Windows Vista 或 Windows Server 2008 上的 Visual Studio 2010 旗舰版中创建的层关系图。

若要解决此问题,请使用以下解决方法之一:

  1. 从以下位置将 Microsoft.VisualStudio.Progression.NativeProvider.targets 文件复制到包含建模项目的文件夹中:

    如果您安装了 Visual Studio 2010 可视化和建模功能包:

    %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<插入 Visual Studio 功能包名称>\1.0

    提示

    除非您已在其他位置安装了功能包,否则 %LocalAppData% 通常为“驱动器名称:\Users\用户名\AppData\Local”。 在 Windows XP 或 Windows 2003 上,使用 %AppData% 而不使用 %LocalAppData%。

    如果您安装了 Visual Studio 2010 功能包 2:

    …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\<插入 Visual Studio 功能包名称>\<插入 Visual Studio 功能包版本号>

  2. 在 .modelproj 文件中,通过将绝对路径替换为 .targets 文件的相对路径,更新 .targets 文件的 <Import> 元素。 例如:

    <Import Project="Microsoft.VisualStudio.Progression.NativeProvider.targets" />
    
    重要说明重要事项

    如果使用版本控制,则必须将 .targets 文件签入到版本控制中。

- 或 -

  1. 新建一个表示 Microsoft.VisualStudio.Progression.NativeProvider.dll 文件的安装路径的环境变量。

  2. 使用此变量导入 .targets 文件。

    例如,您可以创建一个指向 .targets 文件所在位置的环境变量,如“NativeProviderTargetPath”。 然后更新 <Import> 元素,如下所示:

    <Import Project="$(NativeProviderTargetPath)\Microsoft.VisualStudio.Progression.NativeProvider.targets" />
    
    重要说明重要事项

    确保在不同操作系统中正确设置此环境变量。

请参见

任务

如何:从项目中创建层关系图

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

概念

层关系图:指南

修订记录

日期

修订记录

原因

2010 年 12 月

针对 Visual Studio 2010 功能包 2 更新了内容。

信息补充。