【发布时间】:2012-01-03 20:23:35
【问题描述】:
我正在运行 TeamCity 来构建一个 .NET 项目(更准确地说是几个项目)。
我应该使用重建目标还是构建目标?
我想尽量减少构建时间,同时不生成任何未更改的新版本项目。
使用“构建”目标是否安全?如果以前的项目输出被删除了怎么办?我如何验证我可以安全地执行此操作?
【问题讨论】:
标签: c# .net build continuous-integration teamcity
我正在运行 TeamCity 来构建一个 .NET 项目(更准确地说是几个项目)。
我应该使用重建目标还是构建目标?
我想尽量减少构建时间,同时不生成任何未更改的新版本项目。
使用“构建”目标是否安全?如果以前的项目输出被删除了怎么办?我如何验证我可以安全地执行此操作?
【问题讨论】:
标签: c# .net build continuous-integration teamcity
如果您需要重建所有项目,您应该使用 rebuild,例如为了获得一致的时间戳或版本号(尽管通常,链接的 AssemblyInfo.cs 中的更改将触发构建也是。)
即使先前构建的构建输出消失了,或者即使构建碰巧在没有构建输出的新构建代理上完成,构建也是完全安全的。在这种情况下,将构建所有必要的项目。
但是,您的 sln/csproj 文件中可能有依赖于(重新)构建的自定义 MSBuild 步骤,在这种情况下,您需要更加小心,但除此之外,如果您愿意,请选择构建。
【讨论】:
您应该始终在持续集成服务器上执行rebuild 操作。
与您可能读到的相反,有可能从以前的构建泄漏到当前构建中。泄漏几乎绝不是由于无法将源代码编译为二进制文件的结果,但取决于您用于执行构建的工具,可能会有非代码文件不会被复制,因为它们已经存在于输出目录,或已删除的未从中删除的文件。
出于类似的原因,如果您能承受执行时间的成本,您还应该始终在构建之前清理源代码树。要么销毁它并检查一个干净的副本,要么还原任何更改并删除任何不受源代码控制的文件。如果您不是在每个构建中都这样做,至少在“空闲时间”构建(例如,夜间或周末构建)以及您打算实际交付给客户或部署的构建上执行投入生产(最好投入质量保证)。
【讨论】:
Build 生成运行项目所需的一切,保持未更改的程序集。 Rebuild 强制对所涉及的任何程序集进行完整构建。除非在特定情况下(版本号、依赖于某些东西的进程),否则使用构建来减少花费的时间是安全的。
【讨论】:
您应该使用 Build 逐步构建您的项目。这是完全安全的。
【讨论】: