谁能解释什么优点有使用类似的MSBuild(或恶性)的工具来构建项目的集合与在命令行运行devenv.exe的?
我在过去曾与一位同事解释说,(至少与旧版本的Visual Studio)使用devenv.exe的比其他技术要慢得多,但我还没有看过的任何证据或如果是现在现在开始与2005年时,Visual Studio使用的MSBuild引擎盖下争论的焦点。
我知道使用的MSBuild的一个优势可以让你建立你的项目,而不需要的Visual Studio要在构建机器上安装,但我不知道是否还有其他人。
其中一个原因是因为有更多的建设一个产品不仅仅是编译它。 任务,如创建安装,更新的版本号,创建escrows,分发最终包装物等,可能是因为什么这些工具(及其扩展)提供容易得多。
虽然你可以做这一切定期脚本,使用恶性或的MSBuild给您做这一切坚实的框架。 有很多的两个社区的支持,包括可下载(如额外任务的MSBuild社区任务项目 )。 另外,还有众多的第三方和开源产品对他们的支持。
如果你在编译(而不是整个构建过程)有兴趣,你可能会发现一个节省时间的MSBuild受益的是针对多处理器建设的支持 。
从我的团队明显的答案是, 不感到沉沦已安装Visual Studio,特别是我们不安装Visual Studio到我们的构建/ CI服务器。
其主要理由使用像南特或的MSBuild外部构建工具是自动化构建过程,从而对系统的状态提供连续反馈的能力。 此外,他们可用于加载的东西,除了一个“纯粹”的建立和这就是你真正开始得到他们的价值,这是要能够建立和使用一个命令测试你的应用中有着非常有价值的事情。
您也可以开始添加的东西像指标收集,发布二进制文件的packinging和各种这样的漂亮的东西。
至于C#去,devenv.exe的2005年运行在进程内的编译器,这可能会导致内存不足异常的相当大的解决方案。 MSBUILD诉诸启动csc.exe进程为每个项目。 不与devenv的编译/构建与MSBuild的做工精细的项目。 希望你喜欢这个原因。
我们从devenv的切换到使用的MSBuild引擎盖下的工具(视觉构建Pro)的实验,我们得到了“需要对程序集引用“System.Drawing中...”一个错误,并不需要它,这一个项目建立在Visual Studio中的罚款。
我们拥有包括C#一个大系统,托管C ++,和普通的老式非托管C ++组件/ DLL文件。 有依赖于依赖的依赖的托管C ++代码的C#代码依赖于普通的旧C ++代码(哇!)托管C ++代码的C ++代码。 当我们建立我们的自动化构建环境在几年前,我们发现,MSBuild.exe没有妥善处理,我们有依赖。
与微软的合作,我们能够解决一些问题,但不是所有的人。 如果我没有记错,我们无法让这依靠托管C ++动态链接库来构建C#程序集。 因此,我们最终作出从从命令行调用devenv.exe的自定义生成脚本和它的工作就好了。
当然,这与VS2005,它可能是现在固定的,但脚本仍然是工作,所以我们并没有重新发行。
文章来源: Advantages of using MSBuild or NAnt versus running DevEnv.exe from command-line