MSBuild项目与PowerShell构建流程对比

4
我需要完成以下任务:
  • 预构建设置(下载依赖项等)
  • 构建 .net 解决方案
  • 运行测试(单元测试和功能测试)
  • 生成文档
  • 生成 nuget 包
  • 签名输出
我可以通过创建使用 msbuild 编译解决方案的 PS 构建过程或具有目标的 MSBuild 项目来完成任务(使用一些助手 PS 脚本)。PowerShell 更加灵活,但 MSBuild 是一个构建框架,并具有一些集成的构建相关功能。我想知道最佳实践是什么。请分享您的想法。

1
这个问题可能太宽泛了。但是你可能会对一些PowerShell中的构建自动化工具感兴趣,比如Invoke-Build。这里有一个教程,可以快速熟悉一下。 - Roman Kuzmin
谢谢。如果我选择PowerShell,我会看看能否使用其中一些模式。我熟悉PS,但对MSBuild不太了解。我只是想知道MSBuild是否可以提供一些难以在PS中实现的开箱即用功能。 - f0rt
很可能。Invoke-Build只是一个任务运行器,由于PowerShell而强大。但真正的构建工具都是外部的。幸运的是,它们很容易从Invoke-Build脚本中调用,例如 exec { MSBuild .... } - Roman Kuzmin
1
也许 cake 可以帮助你 -> 请参阅 http://cakebuild.net/。 - Moerwald
2个回答

4
默认情况下,MSBuild专门处理任务及其依赖关系。因此,当您想要执行MSBuild默认无法完成的自定义操作时,您需要通过目标调用脚本/工具,或者通过在项目中包含社区/自定义扩展来添加更多类型的任务。
另一方面,Powershell则没有内置结构的限制,所以您必须自行解决问题,但是您可以自由地在开箱即用的情况下做任何您想做的事情,而无需使用另一个工具/语言来填补空白。对于多个项目,如果您想保持构建系统可维护性,您将不得不创建某种框架。 如果您想要两全其美PSAKE是一个任务处理Powershell模块,类似于MSBuild,并且其语法基于RAKE,非常棒。简而言之,PSAKE比MSBuild具有更轻巧的语法,并且大多数功能都可通过Powershell使用,因此您可以从两个世界中受益。 通常,这取决于口味和需求。我喜欢简短而简洁的语法,清楚地说明代码的哪一部分执行了什么操作。MSBuild基于XML,因此存在大量冗余,它没有自带的IDE,并且需要外部工具(如Visual Studio)来调试。PSAKE是一个Powershell模块,因此您可以生成Powershell ISE,加载该模块并在创建构建脚本时享受智能感知。
但请注意,有很多选择,不要将选择局限于仅使用MSBuild和Powershell。在此处查看一些替代方案。

0

MSBuild(现在我们有一个使用dotnet cli的包装器)是微软的构建引擎,其目标是创建一组任务,最终获取工件或程序集。 另一方面,PowerShell是一种任务自动化和配置管理工具。这意味着您可以创建更复杂的流水线脚本,包括调用MSBuild、NuGet CLI等(例如,调用远程模块或任何其他附加任务)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接