繁体   English   中英

MSBuild 扩展包与 MSBuild 社区任务

[英]MSBuild Extension Pack vs MSBuild Community Tasks

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

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

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

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

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

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

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

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

我目前在工作中使用 MSBuild 社区任务。 我没有接触过其他扩展,但我可以在这个库上告诉一些事情。
优点:

  • 易于安装(MSI 安装程序)
  • 易于修改。 源代码可用,并且具有 BSD 许可证,因此可以自由修改。 基本上,您只需将 go 转为与任务同名的 .cs 文件,修改它,打开 .sln 文件并构建解决方案。 然后你只需将 output 粘贴到 C:\Program Files\MSBuild\MsbuildTasks\
  • 如果您不想编写太多非 msbuild 代码,一些扩展非常有用。 压缩很棒,对文件的 RegEx 操作也很有用。
    • 我没有尝试其他,但我看到有一些有趣的任务,如 gacutil(安装 dll 以供全局查看)、创建 IIS 目录、更改文件属性......
    • 是的,您可以使用 MSBuild 完成所有这些任务,但是您将需要使用大量“执行”命令,或者在您的属性上使用 c# 函数,并且代码将是一团糟。

缺点:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM