2017-06-15 89 views
3

我必须完成以下任务:MSBuild项目VS PowerShell的构建过程

  • 预生成安装(下载的依赖等)
  • 构建.NET解决方案
  • 运行测试(单元测试和功能测试)
  • 生成文档
  • 生成的NuGet包
  • 注册输出

我可以通过创建PS构建过程(使用msbuild来编译解决方案)或带有目标(使用一些辅助PS脚本)的MSBuild项目来完成任务。 PowerShell更灵活,但MSBuild是一个构建框架,并具有一些集成的构建相关功能。 我想知道什么是最好的方法。请分享想法。

+1

这个问题可能太广泛了。但是您可能对PowerShell中的一些构建自动化工具感兴趣,如[Invoke-Build](https://github.com/nightroman/Invoke-Build)。这里是[教程](https://github.com/nightroman/Invoke-Build/wiki/Script-Tutorial)快速熟悉。 –

+0

谢谢。如果我使用PowerShell,我会看看是否可以使用一些模式。我熟悉PS和MSBuild。我只是想知道,如果MSBuild可以提供一些在PS中很难实现的开箱即用功能。 – f0rt

+0

也许吧。 Invoke-Build只是一个任务运行者,由于PowerShell的强大功能。但真正的构建工具都是外部的。幸运的是,它们很容易从Invoke-Build脚本调用,例如'exec {MSBuild ....}'。 –

回答

0

开箱即用,MSBuild专门处理任务及其依赖关系。因此,当您想要执行默认情况下MSBuild无法完成的自定义内容时,您需要通过目标调用脚本/工具,或者通过在项目中添加社区/自定义扩展来添加更多类型的任务。

在另一方面,PowerShell的是自由形式的,所以你要以你的方式没有内置结构,但你有自由做任何你想做的开箱和无需使用另一种工具/语言来填补空白。 对于多个项目,如果要保持构建系统的可维护性,则必须创建某种框架。

如果你想两全其美PSAKE是处理那些作用类似于MSBuild的,有语法基于RAKE,这是非常整洁的PowerShell的模块任务。简而言之,PSAKE的语法比MSBuild轻,并且它的大部分功能都可以通过Powershell使用,所以您可以从两个世界中受益。

一般来说,这是一个品味问题,需要。我喜欢短而甜的语法,清楚地说明代码的哪部分做了什么。 MSBuild基于XML,所以有很多冗余,它没有随附的IDE,需要像Visual Studio这样的外部工具来调试它。 PSAKE是一个Powershell模块,因此您可以派生Powershell ISE,加载模块并在创建构建脚本时享受IntelliSense。

但明白有很多的可能性,因此选择什么,所以选择你的毒药和不缩小你的选择只有MSBuild和PowershellSee some alternatives here.

0

的MSBuild(现在我们使用的dotnet CLI的包装)是微软打造的发动机,它的目标是创建一组任务,最终得到的工件或组件。另一方面,PowerShell是一项任务自动化和配置管理。这意味着您可以为更复杂的流水线创建脚本,包括调用MSBuild,NuGet CLI等(例如调用远程模块或任何其他附加任务)。