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