MSBuild Extension Pack与MSBuild Community Tasks比较

12
我第一次开始制作自定义 MSBuild 脚本。我看到有两个标准选项来扩展功能:MSBuild Extension PackMSBuild Community Tasks
我想知道它们之间的区别,以及为什么要使用一个而不是另一个,甚至两者都使用。我在必应上搜索了一下,但是找不出重点。感谢任何指导。

4
我必须评论一下这句精彩的表达:“我已经使用Bing搜索了谷歌” :) - Magnus
3个回答

8
我这里提供我的两个角度。首先,我不会完全称它们为“标准”选项。这两者都比MSBuild 4.0和内联任务以及属性函数功能早,并且它们的许多任务已经相当过时了。我写了数千行MSBuild代码,只需要使用它们库中的任务几次。
其次,它们的好处在于它们是相当模块化的。您可以挑选您需要的程序集和目标文件并将它们纳入您的代码库中,而不必被整个实现所束缚。有时我会从一个库中挑选一个任务,从另一个库中挑选一个任务,两个都在同一个构建中。我总是更喜欢使用简单的MSBuild 4.0功能,而不是库中的东西。我对库中的某些任务很感兴趣,但它们的行为并不是我所需要的,所以我自己动手写了一些(例如,zip任务就是其中之一,因为我想控制分组压缩而与源文件夹无关)。一旦您要编写一个自定义任务,编写其他任务变得非常容易,全部放在同一个程序集中。
最后,我想说的是,这不仅仅是关于库,更重要的是您需要特定任务的非常具体需求,只需使用您需要的内容,不要将构建与其他任何东西编织在一起。

Spider M9 - 感谢您的参与和反馈。有趣的是,MSBuild 4到目前为止已经具备了一些功能。然而,似乎仍然有很多两个任务扩展包中列出的功能不在MSBuild中——例如压缩、IIS操作和SCM集成等。手动实现这些功能需要大量的工作量。您的意思是我可以从两者中选择所需的功能吗? - James
这是一个很好的观点,我很高兴将其标记为我的问题已回答。然而,我会再等几天,因为我真的希望有人能够分享他们使用这两个扩展包的经验,并且如果他们有偏好的话。 - James
2
是的,最终它取决于您项目所需的特定任务,对此,在我的经验中,最好的方法是从所在库中选择您需要的任务,或自己开发。 - Brian Kretzler
只想添加一个来自2015年的注释。MSBuild.Extension.Pack似乎是微软人员(例如MSBuild大佬Syed Hashimi)支持的那个。Community Tasks仍在开发中,我真诚地喜欢它的设计,但似乎比Extension Pack得到的支持/文档更少。 - makhdumi

1

我的建议 - 我曾经遇到这样一种情况,需要快速为一个项目创建一个构建脚本,并在没有TFS和VS.NET安装的普通Windows机器上运行。构建脚本应该执行以下操作 -

  1. 从TFS获取源代码
  2. 构建项目
  3. 执行单元测试
  4. 运行FxCop、StyleCop、CodeMetrics
  5. 创建代码文档
  6. 最后,发送电子邮件结果

我不得不超越MSBuild 4.0,因为我想要一个简单的方法来运行上述工具并发送电子邮件。我查看了MSBuild Community Tasks和MSBuild Extension pack。虽然我已经阅读过扩展包是一个复杂而全面的软件包,但我仍然尝试了一下,但最终我选择使用Community pack,因为它真的很容易使用,甚至可以扩展代码,相比之下,其他工具甚至缺乏文档。在我看来,只有当你有时间了解如何使用它时,扩展包才是一个选项。


1

我目前在工作中使用MSBuild社区任务。我没有接触过其他扩展,但我可以谈谈这个库的几个方面。
优点:

  • 易于安装(MSI安装程序)
  • 易于修改。源代码可用,并且具有BSD许可证,因此可以自由修改。基本上,您只需转到与任务名称相同的.cs文件,进行修改,打开.sln文件并构建解决方案。然后,您只需将输出粘贴到C:\Program Files\MSBuild\MsbuildTasks\中即可。
  • 某些扩展非常有用,如果您不想编写太多非MSBuild代码。压缩很好,对文件进行的RegEx操作也很有用。
    • 我没有尝试其他内容,但我已经看到了一些有趣的任务,例如gacutil(安装dll以全局可见),创建IIS目录,更改文件属性...
    • 是的,您可以使用MSBuild执行所有这些任务,但是您需要使用大量的“Exec”命令,或者在您的属性上使用c#函数,而且代码会非常混乱难懂。

缺点:

  • 缺乏有用的文档(也许是我没有搜索得够好,但我找到的唯一帮助就是下载源代码,找到适合你任务的 .cs 文件并分析它)
    • 最让我烦恼的事情是,在项目网站上没有任务属性列表。你需要在论坛上搜索或查看代码。
  • 我遇到的唯一问题是 RegexReplace 保存文件为 UTF-8 编码。
    我的同事编写了成千上万个 SQL 脚本,所有脚本都以 ANSI 编码。当我替换其中的内容并将其传递给 SQLCMD 时,它无法解析文件,因为在所有 UTF-8 文件末尾添加了一个符号(某种编码符号)。我需要进入 RegexReplace.cs,在其中一个函数中更改编码参数,然后编译它。所以基本上我需要创建我的分支 :)
    (两分钟的工作,一个小时的向人们解释它的工作原理)
    但是使用 MSBuild 解析 UTF-8 文件没有问题,因此我认为只有在使用外部工具处理文件时才可能遇到问题。

总结:
这是一个有用的工具,易于安装和使用,它可以帮助使您的代码更清晰、更易于理解,并且可以节省一些时间。我认为最大的问题是文档,但您可以在谷歌上写下任务名称和库并在论坛、博客和这里找到一些代码。


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