12

我刚刚开始第一次制作自定义 MSBuild 脚本。我看到有两个扩展功能的标准选项:MSBuild Extension PackMSBuild Community Tasks

我正在寻找一些关于这些之间有什么区别的指导,以及为什么我会使用一个而不是另一个,甚至两者都使用。我在 Bing 上用 Google 搜索过,但只见树木不见森林。任何指导表示赞赏。

4

3 回答 3

8

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

它们的优点是它们非常模块化。您可以只挑选您需要的程序集和目标文件,并将它们签入您的代码库,而不会“卡住”整个实现。有时我会从一个库中挑选一个任务,从另一个库中挑选一个任务,两者都在同一个版本中。我总是更喜欢使用简单的 MSBuild 4.0 功能而不是库中的某些功能。我对图书馆中的一些任务很感兴趣,但这种行为根本不是我需要的,所以我自己动手(这个任务想到了 zip 任务,因为我想控制分组压缩与源文件夹无关)。一旦您必须编写一个自定义任务,在同一个程序集中滚动另一个和另一个非常容易。

最后,我要说的是,它实际上与图书馆无关,而是关于您对图书馆中特定任务的非常具体的需求,使用您需要的东西,不要将您的构建与任何东西纠缠在一起那。

于 2011-07-24T22:01:17.730 回答
1

我的 2 美分 - 我不得不为要在普通 Windows 机器上运行的项目快速创建构建脚本(没有安装 TFS 和 VS.NET)。构建脚本应该执行以下操作 -

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

我不得不超越 MSBuild 4.0,因为我想要一种简单的方法来运行上述工具并发送电子邮件。我查看了 MSBuild 社区任务和 MSBuild 扩展包。虽然我已经读到扩展包是一个复杂的、有益健康的包,但我仍然尝试了一下,但我最终还是使用了社区包,因为它真的很容易使用,甚至与其他包相比,甚至可以扩展代码,即使文档很少或没有. 扩展包,在我看来,只有当您有时间了解如何使用它时,它才是一个选项。

于 2013-10-09T17:21:31.147 回答
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,更改其中一个函数中的编码参数,然后编译它。所以基本上我需要创建我的 fork :)
    (两分钟的工作,一小时向人们解释它是如何工作的)
    但是 MSBuild 解析 UTF-8 文件没有问题,所以我认为只有在使用外部文件时才会遇到问题处理文件的工具。

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

于 2011-07-27T07:17:04.257 回答