【问题标题】:Development Experience with using MSBuild/Nant vs Visual Studio 2005/2008使用 MSBuild/Nant 与 Visual Studio 2005/2008 的开发经验
【发布时间】:2010-10-28 05:15:53
【问题描述】:

我与其他 4 位开发人员一起从事一个项目。我们目前使用 Visual Studio 通过一些 Pre 和 Post 构建事件来构建我们的解决方案。

我想迁移到更强大的构建系统,例如 Nant 或 MsBuild。

这两种方法的优缺点是什么?

开发人员使用 Nant/MsBuild 的体验如何?按 F5 可以轻松调试应用程序吗?解决方案资源管理器中是否还有一个不错的文件列表?还是每次需要向项目中添加 .cs 文件时都需要进入 XML 文件?

这一切如何与源代码管理集成? (我目前正在使用 SourceGear Vault。)

我正在尝试收集足够的信息,以便做出明智的决定。

【问题讨论】:

    标签: visual-studio msbuild build-process build-automation nant


    【解决方案1】:

    有一点需要注意。如果您使用的是 VS2005 或更高版本,除了 C++,您已经在使用 MsBuild。 .csproj 和 .vbproj 文件实际上是幕后的 MsBuild 文件。 VS 托管 MsBuild 以进行构建。

    不过,我无法提供关于 Nant 的太多/任何反馈。

    【讨论】:

    • 向 .csproj 添加自定义构建任务怎么样?这肯定不能通过解决方案资源管理器完成...?
    • @Peter,没有。但是您可以将它们直接添加到 .csproj 文件中。
    • 谢谢@Jared。这有助于提示我。
    • 在此处找到有关 Visual Studio / MsBuild 的文档:msdn.microsoft.com/en-us/library/ms171468(VS.80).aspx
    • 如果您右键单击项目并选择卸载项目,然后您可以单击编辑项目。这将在 Visual Studio 中打开项目,因此您可以对其进行编辑并添加自定义 msbuild 事件。然后只需保存并单击加载项目。
    【解决方案2】:

    我将 nant 用于构建脚本,发现它可靠且支持良好。在这一点上,msbuild 和 nant 似乎在很多方面都差不多。 Msbuild 有一些优点,它是由 Visual Studio 使用的,因此它是平台的内置部分。然而,nant 有很多功能、插件任务和大型社区,因为它的存在时间更长。

    Nant 为大多数源代码控制提供程序提供插件 - including Vault - 并为大多数构建工具(如 CruiseControl.NET 和 TeamCity)提供挂钩。

    开发人员的体验与仅按 F5 略有不同。通常,nant 或 msbuild 文件包含许多在正常快速编译期间通常不会运行的功能。这些脚本用于运行测试、运行构建工具(例如 FxCop 或 StyleCop)、更新/提交工作副本、标记源代码、创建/更新/填充数据库以及构建安装程序或包。并非所有这些事情都是在每次编译时完成的。这是构建脚本工具提供最大好处的地方,并且在 Visual Studio 的范围之外完成。

    我想你会对其中任何一个感到满意。如果您主要使用 MS 工具,则 msbuild 可能更加无缝。另一方面,如果您使用许多开源工具,而这些工具经常使用 nant,nant 可能是一个不错的选择。

    【讨论】:

      【解决方案3】:

      背景:我在 Ant 上做了很多工作,在此之前和之后我用 make 做了很多工作(在非常大的系统上——想想几万行 makefile 对应几百万行代码),以及倾向于定期破解专门的构建系统。而且,哦,是的,我讨厌大多数 MS 工具。

      我不推荐 Ant 类型的构建系统。这么说让我很痛苦,但你最好还是坚持使用 Visual Studio。 Nant 会带走很多你习惯的整洁的 GUI 类型的东西,而且它不太可能给你带来太多回报。

      问题的很大一部分,可能是大部分,是那个该死的 XML 问题。 (嗯,它甚至不是真正的 XML;尝试为 Ant 构建脚本编写一个 DTD。)James Duncan Davidson(Ant 的创始人)曾多次stated 认为将 XML 用于 Ant 是一个错误,而 Ken Arnold 在他与 Ducan Davidson 的讨论似乎是 be saying Ducan Davidson 有点害羞的说。

      Arnold 解释 James Gosling:“每个配置文件都成为一种编程语言,所以你不妨这样想。”

      我完全理解您现在的“编程语言”非常非常糟糕,就在 VS 下构建项目而言,我很高兴并且印象深刻的是您想要解决这个问题。不幸的是,Nant 不会在这条路上帮助你。

      【讨论】:

      • 好吧,也许 Nant/MsBuild 会有所帮助,但并非没有一些痛苦。顺便说一句,我听说过基于 Ruby 的构建系统。这对我来说听起来很有趣,因为这样您就可以轻松掌握真正的语言,并且您不必支付尖括号税。
      • 碰巧的是,我当前的构建系统是用 Ruby 构建的。这是一种相当不错的语言,并且在 Windows 中也能很好地工作。所以,是的,请试试 Rake。
      • 在熟悉了 MsBuild 之后,我相信它将显着改善我的构建过程,同时让我的项目相对用户友好且易于维护(在 VS IDE 中)。 MsBuild 使用与项目文件完全相同的方言——.csproj 文件实际上是一个 MsBuild 文件。
      • 我看到的主要问题是 MsBuild 就像在 XML 中编程。不太好。另一方面,我可以理解为什么要使用 XML,因为它具有高度的机器可读性和可写性。像 Visual Studio 这样的工具如何引入 rake 文件,允许编辑主要项目属性,然后将 rake 配置写回而不破坏 rake 文件中的所有自定义项?据我所知不可能。但是使用 XML 是可能的。
      • 当然也可以用 Rake 文件做到这一点,只是难度更大。也就是说,这不太可能发生。
      【解决方案4】:

      使用 CruiseControl.NET 来自动化你的构建过程。MSBuild 比 NANT 更容易连接,MSBuild 位于 .NET Framework 文件夹中。SGear 有 CruiseControl.NET 的插件,你可以为 MSBuild 编写和下载任务插件....

      【讨论】:

      • 我们现在实际上是在使用 CruiseControl.NET 来进行夜间构建。但我们需要进一步微调和自动化流程。
      【解决方案5】:

      我以前使用 Nant,最近开始使用 MSBuild。

      和你一样,我也是一个 Vault Sourcegear 用户,你会发现 Vault 没有 MSBuild 任务......还是有吗?

      我拥有一些用于 Vault 的 MSBuild 任务的源代码。它们工作得很好,并且基于 NANT 任务中的一个端口(具体时间/日期我不知道)。

      它们是从一个完成移植并打算在 SourceForge/CodePlex 或其他类似平台上开源它们的人那里得到的。但可惜他结婚了,然后就懒得理了。

      我向他求代码,他通过电子邮件将其通过电子邮件发送给我......此后我一直坐在代码上,没有空闲时间,也不想费心将它们归还给他们会受到喜爱的公共领域。

      如果有人对他们感兴趣,我很高兴看到他们去更好的家

      :p

      http ==> img269.imageshack.us/img269/4467/msbuildsourcegearvaultt.png

      【讨论】:

      • 看起来很有趣。我不确定我是否迫切需要将构建系统与 Vault 集成。也就是说,我使用 Cruisecontrol.net,它似乎与 Vault OK 集成。
      【解决方案6】:

      在 Nant 与 MsBuild here 上找到一个有用的线程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        相关资源
        最近更新 更多