是否值得学习使用MSBuild?

时间:2008-09-06 22:26:49

标签: .net msbuild

我只是想知道人们是否认为值得学习使用MSBuild语法来定制.net项目的构建过程,或者是否真的不值得,因为使用它可以轻松构建项目视觉工作室。

我在考虑夜间构建等等,但是我不能使用使用VS内置的命令行构建选项的预定事件吗?那里有优秀的工具吗?

10 个答案:

答案 0 :(得分:14)

@kronoz
我会说是的。
关于MSBuild的一个好处是,如果你修改你的csproj文件以包含自定义构建步骤,那么这些步骤将在VS或MSBuild中发生。此外,如果您有构建服务器,则无需安装完整的VS,只需安装SDK即可构建项目。

答案 1 :(得分:12)

MSBuild绝对值得学习。在初始学习曲线(实际上可能非常陡峭)之后,执行最常见的构建自动化步骤变得相当容易。

  • 以RELEASE模式构建程序集
  • 使用强名称签署程序集
  • 运行单元测试
  • 动态修改xml文件/ Web.config -s
  • 修改程序集的版本号
  • 验证FxCop / StyleCop等......
  • 自动部署 - 创建SQL数据库,IIS网站,Windows服务等......

答案 2 :(得分:6)

听起来你是一个在自己网站上工作的开发人员。如果是这种情况,根本没有必要,但作为您职业经历的一部分,您仍然是一个好主意。

随着项目开发人员数量的增加,项目的自动化构建变得更加必要。两个开发人员很容易编写不兼容的代码,这些代码在组合时会中断(假设我正在调用函数foo(int x),并且您将签名更改为foo(int x,int y):当我们结合我们的代码库,代码将会中断。

这些类型的错误会增加复杂性,并且会增加集成构建之间的时间量。通过设置夜间构建,甚至每次签入时发生的构建,这些问题都会大大减少。对于有多个开发人员的项目,这种做法几乎是行业标准。

现在,回答你的问题:这是一项跨越项目和公司的技能。您应该学习它以扩大您作为开发人员的知识和技能,并在简历中添加重要的一行。

答案 3 :(得分:6)

对于任何编写.NET软件的人来说,MSBuild绝对值得学习。 .NET应用程序的构建服务器不再需要安装Visual Studio的原因(正如Andrew Burns所提到的)是因为MSBuild现在是.NET Framework的一部分。

了解MSBuild将为您选择用于实现持续集成的技术提供极大的灵活性。因为我花时间学习MSBuild,所以我能够将我们的团队之一使用的CI系统从CruiseControl.NET改为TeamCity而没有太大困难。那些CI服务器,或类似FinalBuilder(我不熟悉的),是执行夜间构建而不是计划任务的更好选择。学习如何实现自定义MSBuild任务将为您提供实现自定义构建的更大灵活性。 Jivko Petiov列出了许多MSBuild更容易完成的任务。在数据库部署和配置的情况下,我编写了在MSBuild中执行此操作的脚本,它使开发和测试过程更加容易。

如果您将来使用Visual Studio Team System,那么使用MSBuild构建的应用程序将比通过其他方式构建的应用程序更容易进入该环境。

有很多资源可以帮助您开始使用MSBuild。我从Inside the Microsoft Build Engine开始。其中一位合着者在网上也有大量内容,包括this siteproject on CodePlex

答案 4 :(得分:4)

嗯,MSBuild是内置的,所以如果你做的很简单,那么是的,建议。

但是对于像夜间构建这样的东西,我会建议FinalBuilder

请参阅此question on Build/Configuration Management Tools.

答案 5 :(得分:2)

MSBuild非常简单易用,您可以使用VS来管理项目和解决方案文件,并将SLN传递给MSBuild。

答案 6 :(得分:2)

在像你这样的场景中,你还没有构建系统,那么是的,MSBuild是绝对值得的。您不仅可以将它用于各种预构建和后构建任务(请参阅Jicko Petiov的答案),但您也可以将其很好地集成到持续集成环境(例如CruiseControl)中。

可能不值得的一种情况是,您已经拥有自动/脚本化构建系统。例如,我自己没有花时间使用MSBuild,因为在MSBuild存在之前我一直在使用NAnt执行此任务...

答案 7 :(得分:1)

如果您在.net工作室中开发,它确实值得学习。
我已经将我们的构建过程与Jenkins集成 - 最初是Hudson。 如上所述,MSbuild有着陡峭的学习曲线。但不过一次 你掌握了基础知识,就可以开始定制构建了。 到目前为止我的印象 - 可能是天真的,大部分剧本都是由

组成的
<PropertyGroup>
   <PropertyKey>value</PropertyKey>
</PropertyGroup>
<ItemGroup>
   <ItemListKey>List values<ItemListKey>
</ItemGroup>
<Task Source="" Target="" />
    Besides using for build, I successfully used MSBuild to create a module that manages
    configuration files such as web.config and foo.exe.config files. 
    it is a hybrid module that consists of .net console app, MSBuild script and batch file.
    what this module does is that during a project upgrade, it will create a XML transform       
    template with connection strings, endpoints and appSettings from old configuration
    files. 
    after the project has been upgraded, the module will transform newly deployed  
    configuration
    files without affecting any new entries. if you have dozens of configuration files this  
    is very effective. 

答案 8 :(得分:0)

使用MSBuild从命令行构建相对容易学习。首先打开Visual Studio命令提示符,然后运行msbuild /?。只需阅读一次帮助,然后再决定是否要了解更多详细信息。

编写项目文件有点复杂。大多数人不需要学习它,因为你可以在Visual Studio中完成大部分工作。但是,它对于某些问题也非常强大。

我过去曾使用MSBuild作为脚本语言,并结合了大量自定义任务。 MSBuild具有出色的日志记录支持+内置依赖项管理。但是,这不是一门容易学习的语言。 PowerShell是一个更好的选择。

答案 9 :(得分:0)

  

@kronoz我会说是的。整洁   关于MSBuild的事情是,如果你   修改您的csproj文件以包含   自定义构建步骤然后这些步骤   将发生在VS内或来自   MSBuild的。如果你有一个版本   服务器,您不需要安装   完全VS,只有SDK来构建你的   项目

==&GT;这不完全正确。例如,在构建服务器上构建安装项目将需要安装Visual Studio !!