0

假设我有“建立服务器”和“dev的机器”,这两个具有以下特征假设我有相同的源代码,我是否必须重建代码?

  • C#编译器
  • 相同源代码
  • 相同系统环境变量
  • 相同编译&编译器标志
  • 构建服务器和开发机器上的相同体系结构

我也了解有关从Eric Lippert's blog C#编译器下面的(我使用.NET,但这个问题可以问任何静态语言构建过程中)

  • 设计的C#编译器永远不会产生相同的二进制两次
  • 在基本层面上,C#编译器为您做的工作是需要C#代码,分析它的正确性,并生成一个用PE格式编写的等效程序
  • 编译器优化和多线程编译器不是-determinstic
  • JIT将cha在运行时

知道这一切NGE的代码。

如果我建立在生成服务器上的源,并得到一组DLL的和我所说的server binaries

难道不是多余的重建我的开发机器上的二进制可执行文件,即建立local binaries

AREN server binarieslocal binaries有效替代对方。

如果是这样,我可以只复制所有的server binaries ...但他们local binaries已经去了,并把它们当作我自己建造它们的想法。

很明显,在1个开发机器的情况下,这似乎是不必要的,但如果我有开发机器,我只需要构建一次,而不是n次。

是否有明显的平局背对着我的逻辑是什么? .Net商店的这种常见做法是什么?

回答

0

是原则上它是多余的重建他们对你的机器。但是你的问题不够具体,有多种可能的情况会产生不同的答案。

举例来说,如果你有不经常改变的,并保存在一个单独的解决方案基本工具库,这些都是具有服务器建立他们,然后被用作这种明显的候选人。但请记住,简单地复制二进制文件可能会很繁琐且容易出错。每次更改代码时都必须执行此操作。你必须为它编写一个脚本。如果需要调试功能,您还必须复制pdb文件,并在开发机器上具有相同的源代码。在这种情况下,让NuGet为你管理这件事可能会很方便。另一种情况是这样的:如果整个项目非常大但是足够模块化,那么单个开发人员或他们的团队可以在不需要其余部分的全部源的情况下在项目的单独部分上工作。如果他们不必费心构建他们不需要处理的那些项目部分,他们就会获得时间,但是可以从服务器上提取工作版本。

另一个典型的情况是您有一个解决方案,其中包含一组逻辑上属于一组的项目。像主要的UI项目,具有应用逻辑的基础项目,插件项目等等。原则上,服务器可以为你构建其中的一些,这是完全没有意义的,并且是完全不切实际的(并且注意到这里的一些缺点也可能适用于上述情况,因为有时在简单的实用程序库和许多项目严重依赖的某些事物之间没有明确的界限):在修改源代码之后,您需要将更改推送到服务器,然后等待它建立,然后复制结果。这是浪费时间。特别是因为您的服务器可能需要很长时间才能生成构建结果,因为它会在所有可能的配置中构建/测试所有内容。此外,默认情况下,VS会覆盖刚刚复制的二进制文件,因此您必须卸载该项目,或者找出其他方式使其不能执行此操作。

相关问题