【发布时间】:2014-01-16 03:49:53
【问题描述】:
假设我有一个“构建服务器”和一个“开发机器”,它们都具有以下特征
- C# 编译器
- 相同的源代码
- 相同的系统环境变量
- 相同的编译器和编译器标志
- 构建服务器和开发机器上的架构相同
我还从Eric Lippert's blog 了解了以下关于 C# 编译器的内容(我使用的是 .NET,但可以针对任何静态语言构建过程提出这个问题)
- C# 编译器的设计不会两次生成相同的二进制文件
- 从根本上说,C# 编译器为您完成的工作是接收 C# 代码,分析其正确性,并生成以 PE 格式编写的等效程序
- 编译器优化和多线程编译器是不确定的
- JIT 将在运行时更改代码
知道这一切。
如果我在构建服务器上构建源代码并获得一组 DLL 和可执行文件,我称之为 server binaries
在我的开发机器上重建二进制文件不是多余的,即构建local binaries
server binaries 和 local binaries 不是彼此的有效替代品吗?
如果是这样,我可以复制所有的 server binaries ... 但它们在 local binaries 会消失的地方,并将它们视为我自己构建的。
显然,在只有 1 台开发机器的情况下这似乎没有必要,但如果我有 n 开发机器,我只需构建一次,而不是 n 次。
我的逻辑有明显的缺陷吗?这是 .Net 商店的常见做法吗?
【问题讨论】:
标签: compiler-construction msbuild build-process binary-compatibility