【问题标题】:Storing Windows SDKs in source control?将 Windows SDK 存储在源代码管理中?
【发布时间】:2013-04-07 16:43:35
【问题描述】:

问题在最后——让我从提出上下文开始:

我们在使用 Visual Studio 时面临的一个问题是确保团队中的每个人都使用相同版本的 SDK。

一个典型的问题是有人使用不同的 Direct X SDK 版本导致代码行为不同,或者有人升级到更新的 Platform/Windows SDK 以使用某些如果他们仍然使用以前的版本,新的 API 并且代码在其他程序员的机器上会失败。

我们用来解决其他中间件问题的一种方法是将整套库、包含文件、工具链等放在我们的源代码控制系统中,并让我们的项目使用这些,所以没有人拥有安装任何东西。 我们也设法使用早期版本的 Direct X SDK 做到了这一点,但由于 SDK 和工具链之间的密切联系,我们总是遇到 Windows/Platform SDK 的问题。

由于我们现在必须同时支持 VS2010 和 VS2012,并且必须支持从 Windows XP 到 Windows 8 目标,我们必须支持 v100v110 >v110_xp 工具集。

这意味着我们需要所有相关的编译器和相应的 SDK,无论是在我们的开发人员机器还是构建系统上:维护成本高得离谱,特别是考虑到随机 Windows 更新和 .net 框架版本通常会破坏 msbuild .

所以问题是:

  • 是否可以让 Visual Studio 使用未安装的工具集和 SDK,而让它使用正常 VS 安装位置之外的某个文件夹中可用的任何内容?

  • 额外问题:如果可行,是否可以在不更改机器上任何本地安装的配置文件的情况下做到这一点 - 即:在解决方案/项目或属性表中包含所有内容 - 所以如果我们改变源代码控制系统的结构,我们不必更新每台机器?

谢谢:)

【问题讨论】:

  • 我会保证VM(构建服务器)的方式。或者,ghost 安装映像。 (您所描述的 IMO 在某种程度上是 UNIX 世界,遗憾的是,微软不太适合这种情况)
  • 对这两个问题都是肯定的,但它更像是一种 hack 而不是微不足道的操作。您可以在构建机器上设置它。在任何情况下,您都应该将其分支出来并在准备好使用时将其滚动到 dev 分支。
  • 我同意@sehe 的观点,您应该尝试构建标准虚拟机并强制开发人员使用相同的环境。这是一个每个人都应该遵循的严格过程,除非有人想破坏构建并伤害其他人。如果有人确实需要使用更新的 SDK,请为他/她构建一个新的 VM 映像,并要求签入一个隔离分支。一旦时机成熟,每个人都应该升级到新的 VM 映像。如果你管理得好,你不需要签入 SDK 到源代码控制,因为那不是解决方案。
  • @LexLi 公平地说,我在聊天中与 Mickaël 和it turned out to be unfeasible for the actual dev stations because of the need for direct GPU access 讨论了这个问题。 (它仍然是构建服务器的一个选项)
  • 确实有解决方案(适用于 Windows)提供直接 GPU 访问,即所谓的 boot-to-VHD,blogs.technet.com/b/haroldwong/archive/2012/08/18/…。 Windows 7 和 8 都支持这一点。它只使用虚拟化硬盘,与双启动非常相似。您可以评估这对您的团队是否足够。

标签: visual-studio version-control sdk msbuild build-automation


【解决方案1】:

这听起来太复杂了,因为其中一些工具的安装非常复杂。我会通过投资一些 PowerShell 脚本来解决这个问题,这些脚本会查看已安装的工具和工具路径并“监管”安装。检查所有内容的已安装版本(包括补丁和更新)相对容易。您可以每晚运行它们,或者作为构建的一部分。此外,您还可以比较不同安装的各个方面,例如安装在开发人员机器上的工具版本与您的构建服务器。

这将为您带来 10% 的痛苦的 90% 的价值。

【讨论】:

    【解决方案2】:

    您描述的问题无法通过您的方法解决。您真正需要的是构建服务器和完成的定义,包括使用构建服务器构建的二进制文件。您还需要一个测试套件作为构建定义的一部分,其中包含一些与所使用的构建环境相关的不变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 2011-03-27
      • 2018-04-27
      相关资源
      最近更新 更多