如何:对照层关系图验证 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 解决方案必须包含一个具有层关系图的建模项目。
创建建模项目
在**“解决方案资源管理器”中右击顶级解决方案节点,指向“添加”,再单击“新建项目”**。
在**“添加新项目”对话框的“已安装的模板”下,单击“建模项目”,再单击“建模项目”**。
重命名该项目,然后单击**“确定”**。
Visual Studio 将一个新的建模项目添加到解决方案中。
确保保存此建模项目。
创建层关系图
在**“体系结构”菜单上,单击“新建关系图”,然后在“添加新关系图”对话框中单击“层关系图”**。
重命名关系图,选择建模项目,然后单击**“确定”**。
Visual Studio 将一个空白层关系图添加到建模项目中,然后显示此关系图。
从**“解决方案资源管理器”**中,将至少一个 C 或 C++ 项目拖动到层关系图图面上。
- 或 -
从**“体系结构资源管理器”**中,将至少一个二进制文件拖动到层关系图图面上。
执行上述任一步骤的同时,还会自动将以下项添加到建模项目中:
对建模项目的项目引用。
建模项目文件 (.modelproj) 的 <Import> 元素,用于导入自定义 .targets 文件和对 C 或 C++ 代码启用层验证。
定义其他层,将项目链接到这些层并描述这些项目之间的预期依赖项。
有关更多信息,请参见如何:从项目中创建层关系图和层关系图:指南。
确保保存此建模项目。
重要事项 如果您只保存层关系图,而不保存建模项目,然后关闭了解决方案,则必须为建模项目手动添加 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 旗舰版中创建的层关系图。 若要解决这一问题,请参见疑难解答。 |
向建模项目中添加二进制文件
若要验证二进制文件依赖项,则必须手动将需要验证的二进制文件添加到建模项目中。 在将这些二进制文件拖动到层关系图时不会自动添加它们。
将二进制文件添加到建模项目中
在**“解决方案资源管理器”中,右击建模项目,然后单击“添加现有项”**。
在**“添加现有项”对话框中,通过浏览找到并选择二进制文件,然后单击“确定”**。
二进制文件将显示在建模项目中。
在**“解决方案资源管理器”中,单击已添加的二进制文件,然后按 F4 打开“属性”**窗口。
将每个二进制文件的**“生成操作”属性设置为“验证”**。
Team Foundation Build 要求
若要在 Team Foundation Build 服务器上验证 C 和 C++ 项目,则必须按照以下步骤操作:
若要编译项目,请确保服务器上已安装以下产品:
提示
如果在服务器上安装了 Visual Studio 2010 旗舰版,则可以将功能包安装在服务器上,而不用执行步骤 2 和 3。 否则,如果 …\<插入 Visual Studio 功能包名称>\<插入 Visual Studio 功能包版本号> 文件夹不存在于服务器上,则可能必须创建它。 除非您已在其他位置安装了功能包,否则 %LocalAppData% 通常为“驱动器名称:\Users\用户名\AppData\Local”。 在 Windows XP 或 Windows 2003 上,使用 %AppData% 而不使用 %LocalAppData%。
如果您安装了 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
根据已安装的功能包版本,从以下功能包安装位置复制 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++ 项目引用 |
|
导入自定义 .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 旗舰版中创建的层关系图。
若要解决此问题,请使用以下解决方法之一:
从以下位置将 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 功能包版本号>
在 .modelproj 文件中,通过将绝对路径替换为 .targets 文件的相对路径,更新 .targets 文件的 <Import> 元素。 例如:
<Import Project="Microsoft.VisualStudio.Progression.NativeProvider.targets" />
重要事项 如果使用版本控制,则必须将 .targets 文件签入到版本控制中。
- 或 -
新建一个表示 Microsoft.VisualStudio.Progression.NativeProvider.dll 文件的安装路径的环境变量。
使用此变量导入 .targets 文件。
例如,您可以创建一个指向 .targets 文件所在位置的环境变量,如“NativeProviderTargetPath”。 然后更新 <Import> 元素,如下所示:
<Import Project="$(NativeProviderTargetPath)\Microsoft.VisualStudio.Progression.NativeProvider.targets" />
重要事项 确保在不同操作系统中正确设置此环境变量。
请参见
任务
概念
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2010 年 12 月 |
针对 Visual Studio 2010 功能包 2 更新了内容。 |
信息补充。 |