首页 / 知识

关于.net:使用MSBuild是否值得学习?

2023-04-14 10:51:00

关于.net:使用MSBuild是否值得学习?

Is it worth learning to use MSBuild?

我只是想知道人们是否认为值得学习使用MSBuild语法来自定义.net项目的构建过程,或者考虑到人们可以轻松地使用.NET项目构建项目,这是否真的不值得?视觉工作室。

我在考虑每晚构建等方面的问题,但是然后我不能使用预定事件,该事件使用VS中内置的命令行构建选项吗?有高级工具吗?


@kronoz
我会说是的。
关于MSBuild的整洁之处在于,如果您修改csproj文件以包括自定义生成步骤,则这些步骤将在VS或MSBuild中进行。同样,如果您拥有构建服务器,则无需安装完整的VS,只需安装SDK即可构建项目。


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

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

对于任何编写.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。我将从在Microsoft Build Engine内部开始。其中一位共同作者在Web上还有很多东西,包括此站点,以及有关CodePlex的项目。


听起来您是一个在自己的网站上工作的开发人员。如果是这种情况,则完全没有必要,但是作为您的专业经验的一部分,学习仍然是一个好主意。

随着从事项目工作的开发人员数量的增加,自动构建项目变得更加必要。对于两个开发人员而言,编写不兼容的代码非常容易,因为它们在组合时会破裂(假设我正在调用函数foo(int x),而您将签名更改为foo(int x,int y):结合我们的代码库,代码将中断。

这些类型的错误增加了复杂性,并且使集成构建之间的时间变得麻烦。通过设置每晚构建,甚至设置每次签入时都会发生的构建,可以大大减少这些问题。在具有多个开发人员的项目中,这种做法几乎是行业标准。

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


好吧,MSBuild是内置的,因此,如果您做的很简单,则建议这样做。

但是对于每晚构建的东西,我建议使用FinalBuilder。

在构建/配置管理工具上查看此问题。


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

可能不值得的一种情况是当您已经拥有自动/脚本构建系统时。例如,我本人并没有花时间在MSBuild上,因为自从MSBuild出现之前,我就一直在使用NAnt来完成此任务...


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


如果您在.net Workshop中进行开发,则值得学习。
我已经将我们的构建过程与Jenkins(最初是Hudson)集成在一起。
如上所述,MSbuild具有陡峭的学习曲线。
您掌握了基础知识之后,就可以开始自定义构建了。
到目前为止,我的印象-可能很幼稚,大部分脚本由

组成

1
2
3
4
5
6
7
<PropertyGroup>
   <PropertyKey>value</PropertyKey>
</PropertyGroup>
<ItemGroup>
   <ItemListKey>List values<ItemListKey>
</ItemGroup>
<Task Source="" Target="" />
1
2
3
4
5
6
7
8
9
10
    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.

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

编写项目文件要复杂一些。大多数人不需要学习它,因为您可以在Visual Studio中完成大多数事情。但是,它对于某些问题也非常强大。

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


@kronoz I would say YES. The neat
thing about MSBuild is that if you
modify your csproj files to include
custom build steps then those steps
will happen from within VS or from
MSBuild. Also if you ever have a build
server you will not need to install
full VS, only the SDK to build your
projects.

==>这并非完全正确。例如,在构建服务器上构建安装项目将需要安装Visual Studio!


学习项目事件语法

最新内容

相关内容

猜你喜欢