MSBuild扩展包与MSBuild社区任务

时间:2011-07-23 04:07:40

标签: .net msbuild build-automation msbuildcommunitytasks msbuildextensionpack

我刚开始首次制作自定义MSBuild脚本。我发现扩展功能有两个标准选项:MSBuild Extension PackMSBuild Community Tasks

我正在寻找关于这些之间存在差异的一些指导,以及为什么我会使用其中一个,甚至两个。我用Bing搜索了Bing,但看不到树木的木头。任何指导意见。

3 个答案:

答案 0 :(得分:8)

我会报到,只需2美分。几件事情 - 首先我不会把它们称为“标准”选项。两者都早于MSBuild 4.0和内联任务和属性函数功能,其中的许多任务都已经过时了。我已经编写了数千行MSBuild,并且几次只需要从这些库中的任何一个创建任务。

他们的好处在于它们非常模块化。您可以只选择您需要的程序集和目标文件,并将它们检入您的代码库,而不会“陷入”整个实现。有时我会从一个库中挑选一个任务,从另一个库中挑选一个任务,两个都在同一个版本中。我总是喜欢在库中使用简单的MSBuild 4.0功能。我对图书馆中的一些任务感兴趣,但行为完全不是我需要的,所以我掀起了自己的想法(我想到了这个拉链任务,因为我想控制组中的拉链与源文件夹无关)。一旦你必须编写一个自定义任务,就可以很容易地滚动另一个和另一个,所有这些都在同一个程序集中。

最后,我会说这不是关于图书馆的,而是关于库中特定任务的特殊需求,使用你需要的东西,不要纠结你的构建什么,除了那个。

答案 1 :(得分: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文件没有问题,所以我认为只有在使用外部工具处理文件时才会遇到问题。

要点:
这是一个有用的工具,易于安装和使用,它可以帮助您使代码更清晰,更容易理解,并且可以节省一些时间。我认为最大的问题是文档,但您可以在google中编写任务和库的名称,并在论坛,博客和此处查找一些代码。

答案 2 :(得分:1)

我的2美分 - 我遇到的情况是我必须为一个在vanilla Windows机器上运行的项目(没有安装TFS和VS.NET)快速创建一个构建脚本。构建脚本应该执行以下操作 -

  1. 从TFS获取来源
  2. 构建项目
  3. 执行单元测试
  4. 运行FxCop,StyleCop,CodeMetrics
  5. 创建代码文档
  6. 最后,电子邮件结果
  7. 我不得不超越MSBuild 4.0,因为我想要一种简单的方法来运行上面提到的工具并发送电子邮件。我查看了MSBuild社区任务和MSBuild扩展包。虽然我已经读过扩展包是一个复杂的有益健康的软件包,但我仍然尝试过,但我最终使用了社区包,因为它非常容易使用,甚至扩展了代码而不是其他,甚至没有或没有文档。 Extensions Pack,在我看来只有在你有时间了解如何使用它时才是一个选项。