背景
在我的职业生涯中,我惊讶地发现有多少项目在 Visual Studio 中编译和执行项目是一个真正的挑战。问题的根源通常是由于:缺少依赖项、缺少文档、损坏的项目引用等。
为了避免这些令人头疼的问题,我尝试自动化项目/解决方案,例如:
- 在开发人员机器上编译项目时会自动设置运行时环境(例如,使用批处理脚本导入缺少的 Windows 注册表项)
- 编译项目时,会自动检索正确的依赖项(在构建机器和开发机器上)
问题
迄今为止,我已经通过这种方法取得了相当大的成功。但是,我最近收到了一个依赖于 Microsoft Windows SDK 的本机 C++ 项目。在编译时,该项目使用 Windows 环境变量来定位缺失的依赖项(例如 Microsoft Windows SDK)。
我知道使用环境变量是过去的事情。但是,通过依赖软件开发人员来配置开发环境:
- 您假设他们将正确配置环境
- 开发人员在配置上浪费时间,而他们的时间可以更好地用于开发
我不想讨论让开发人员配置开发环境的优点,而是我想知道:
鉴于当今存在的技术(例如 TFS),在团队环境中处理 C++ 项目的大型依赖项(例如 Windows SDK)的可靠且可重复的方法是什么?
潜在的解决方案
- 继续使用环境变量
- Adv:一旦安装了依赖项,构建机器就很容易编译项目
- Dis:您必须花时间记录以确保您可以从头开始配置构建机器(例如步骤1:安装依赖项A,步骤2:安装依赖项B等)
- Dis:您依靠神奇的环境变量来指向正确的目标。
- 缺点:开发人员正在浪费时间配置他们应该开发的时间
- 将依赖项检查到 TFS
- 进阶:一切都保存在一个集中的位置
- 进阶:通过设计,源代码控制保留了历史
- Adv:从某种意义上说,源代码控制使事情自我记录
- Dis:现在在构建机器上编译需要相当长的时间,因为构建机器工作区必须反复从 TFS 检索 Windows SDK
- 其他?
语境
- 编程语言:非托管 C++
- 源代码控制:TFS 2012
- 依赖项:
- Microsoft Windows SDK (~416Mb)
- 内部图书馆
- 我对如何管理/配置 TFS 构建机器的知识有限。
参考
- Microsoft:使用 Visual Studio TFS 进行团队开发(第 6 章)