1、MSBuild
1.1、概述
MSBuild(Microsoft Build Engine)是Microsoft的新的生成平台,通过MSBuild可以创建和编辑可扩展的生成解决方案。从Visual Studio 2005之后,CLR项目的生成工作就转由MSBuild完成,大家比较一下Visual Studio 2005/2008下C#工程和VC工程就会发现其中的不同。
MSBuild可以认为是makefile的扩展,采用XML格式的项目文件描述生成过程中的任务序列,有能力的用户可以自行调整生成过程。
1.1.1、MSBuild平台包括:
1.1.1.1、 执行引擎:MSBuild.exe和Microsoft.Build.Engine.dll,用于完成生成工作的引擎。
1.1.1.2、 MSBuild项目文件的规范。
1.1.1.3、 MSBuild的基本任务(Task)及其扩展机制。Microsoft.Build.Framework、Microsoft.Build.Task等一系列Assembly。
1.1.2、在MSBuild平台可以完成的工作
1.1.2.1、编写MSBuild项目文件,能够自行定义生成过程中每一个活动的细节。
1.1.2.2、根据需要可以编写扩展任务。通过扩展任务可以完成计算机平台下几乎所有的工作,为此MSBuild相当灵活和强大。
MSBuild出现之前,ANT/NANT是比较流行的构造平台,简单的比较了一下,两者的能力几乎完全重叠,从扩展的角度来说MSBuild更容易被CLR平台下的开发人员所接受,ANT之流应该无需考虑了。
1.2、几个重要概念
在MSBuild平台下,生成过程是通过命令行启动控制台程序MSBuild.exe解析项目文件并且逐一执行项目文件中定义的任务完成的。MSBuild项目文件是一个基于XML格式的纯文本文件,规范中定义的几个概念对于理解其运作非常重要。
1.2.1、属性
属性是可用于配置生成的键/值对。属性可用于将值传递给任务、按条件进行计算以及存储将在整个项目文件中引用的值。
在项目文件中表现为<PropertyGroup>元素下的子元素,元素名称即为属性名,可以在整个项目文件中使用$(PropertyName)引用。除了可以在项目文件中定义外,还可以通过命令行设置。例如:
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
为了便于理解,我们可以认为属性相当于字符串类型的全局变量。
1.2.2、项
项表示对生成系统的输入,项通常都是成组出现,这些项根据其用户定义的集合名称被组合为项集合。这些项集合可以用作任务的参数,任务使用集合中包含的各个项执行生成过程的步骤。
在项目文件中表现为<ItemGroup>元素下的子元素,元素名称为项集合的名称,可以在整个项目文件中使用@(ItemName)引用项集合。例如:
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
项与集合乍一看非常雷同,两者的主要区别如下:
l 项总是成组出现并且使用,不存在只使用某一个项的情况,而属性可以单个使用,并且不存在同名却值不同的两个属性。
l 从语法结构上来看,属性就是简单的值名对;而项可以包含称之为“元数据”的子元素,并且项集合还能够通过元数据进行分组,便于使用的时候筛选。
l 属性可以通过命令行的形式动态添加,而项集合只能够在项目文件中定义,当然可以通过执行任务改变项集合中包含的成员(也就是项)。
通俗地讲属性是字符串类型变量;项是对象(具体来说就是实现ITaskItem接口的对象实例),元数据是对象的特性(成员变量);项集合是集合类型的变量,项是集合中的成员。
1.2.3、任务
任务是MSBuild用来执行原子声称曹操作的可执行代码单元。任务包含了两部分的概念:任务逻辑和执行任务。
1.2.3.1、任务逻辑是CLR代码,准确的说就是实现了Microsoft.Build.Framework.ITask接口的.NET类。
MSBuild自身提供了一些常用的任务,我们也可以通过实现ITask接口定义扩展任务。
1.2.3.2、执行任务
在项目文件中执行任务之前,必须首先使用 UsingTask 元素将实现任务的程序集中的类型映射到任务名称。这样便于 MSBuild引擎查找任务的执行逻辑了。
若要在 MSBuild 项目文件中执行任务,请创建一个具有任务的名称的元素,作为<Target>元素的子级。如果任务接受参数,它们将作为元素的属性传递。如果任务支持返回类型的参数,则通过在任务元素下声明<Output>子元素接收返回值。例如:
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="@(MyDestFolder)">
<Output
TaskParameter="CopiedFiles"
ItemName="SuccessfullyCopiedFiles"/>
</Copy>
</Target>
这段代码表示执行Copy任务,将MySourcesFiles项集合中定义的文件复制到MyDestFolder项集合中定义的目录下,成功执行复制的文件存放到SuccessfullyCopiedFiles项集合中。
通俗的讲,相当于外部函数,执行任务就是执行外部函数。
1.2.4、目标
目标就是以特定顺序的任务集合,目标内的任务将依次序顺序执行。
在项目文件中目标表现为<Target>元素,其下包含一组Task子元素。例如:
<Target Name="Build">
<GenerateResource
Sources="alpha.resx; beta.txt"
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
<Csc
Sources="hello.cs"
Resources="@(Resources)"
OutputAssembly="hello.exe"/>
</Target>
一个项目文件中可以定义多了目标,可以通过设定目标的DependsOnTargets属性来要求在执行一个目标前先执行其它多个目标。例如上面的事例可以重新定义为:
<Target Name="Resources">
<GenerateResource
Sources="alpha.resx; beta.txt"
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
</Target>
<Target Name="Build" DependsOnTargets="Resources">
<Csc
Sources="hello.cs"
Resources="@(Resources)"
OutputAssembly="hello.exe"/>
</Target>
通俗的说目标就相当于子程序(Procedure),它是项目文件内部,构造逻辑重用的单元。
1.2.5、项目文件
一个项目文件定义了一次完整的构造,例如一个CLR项目的工程。
MSBuild项目文件是一个根元素为<Project>的XML文档,其中包含了多个<Targets>,可以通过设置项目文件的InitialTargets/DefaultTargets属性来设定构造过程需要执行的目标,也可以通过命令行来设定构造过程需要执行的目标。例如:
msbuild <file name>.proj /t:Clean;Compile
2、Team Foundation Build
MSBuild是一个比较强大并且易于扩展的平台,但是它的价值在于构造一个完整的项目而非一个组件。如果仅仅希望构造一个组件,那么根本不需要研究MSBuild,Visual Studio已经为我们代劳了一切,虽然有些地方还不尽如人意。另一方面如果要构造一个多人协同开发的完整项目单靠MSBuild显然是不能胜任的,还涉及到源代码管理、测试、发布和报告等一系列主题。还好有Team Foundation,其中包含的Team Foundation Build就是用来填补这部分鸿沟的。
2.1、概述
Team Foundation为团队开发提供了版本控制、工作项跟踪、单元测试等从工具到平台的一系列支持。Team Foundation Build是 Team Foundation Server的一部分,对构造提供了扩展的支持。
使用 Team Foundation Build,可以同步源代码、编译应用程序、运行关联的单元测试、执行代码分析、在文件服务器上发布生成,以及发布生成报告。生成结果数据将传播到仓库以生成历史记录报告。
2.1.1、组成
2.1.1.1、源代码管理。存储所有源代码的Team Foujndation版本控制服务器。
2.1.1.2、Team Foundation Build Web服务。在应用程上运行的Web服务,接受来自客户端的请求并协调生成步骤地执行。
2.1.1.3、生成服务,TFSBuildService.exe。
可以部署在单独的计算机上,在一个构造环境中可以安装设置多台计算机分别安装生成服务,运行生成服务的计算机称之为生成代理。生成代理根据Team Build Web服务的说明运行生成步骤。
也可以通过调用命令行工具TFSBuild.exe完成生成动作。可
2.1.1.4、客户端,与Visual Studio集成的Team Explorer。可以创建修改生成定义、查看生成报告和生成进度信息。
2.1.2、相对于MSBuild扩展内容
Team Foundation Build的核心就是生成服务和生成定义,简单的说就是生成服务解析生成定义,按其描述完成构造动作。生成定义是什么?它就是一个遵循MSBuild文档架构的项目文件。可以认为Team Foundation Build就是考虑到与Team Foundation的需要对MSBuild进行的扩展。
其主要扩展内容包括:
2.1.2.1、为MSBuild提供了扩展任务(Microsoft.TeamFoundation.Build.Tasks),以完成和Team Foundation协同的工作,例如从版本控制服务器中获取代码、设置标签等。
2.1.2.2、预定义了一些可扩展的目标,相当于可重载的虚函数。重写这些目标以便于完成自定义任务。
2.1.2.3、通过定义触发器能够自动启动构造过程,触发器有多种类型,比如定时或者代码库中发生变更。
2.1.2.4、通过Team Foundation Server提供的测试平台,能够在构造过程中运行测试项目和进行代码覆盖率的检查,以达到自动测试的目的。
2.1.2.5、已经包含了构造失败发邮件通知,构造成功生成报告的机制。并且在生成报告中能够反映代码集和任务的变更。
因此在Team Foundation Server的协助下,Team Foundation Build是一个比较完善的自动构造平台。
2.2、利用Team Foundation Build实现每日构造
如果没有特殊要求,利用和Visual Studio集成的Team Explorer这个可视化的工具就可以完成,非常容易。
2.2.1、首先需要设置生成代理,BuildàManage Build Agents…。
2.2.2、创建生成定义,BuildàNew Build Definition…。可以参考:http://msdn.microsoft.com/zh-cn/library/ms181286(VS.80).aspx
2.2.3、如果想实现每日构造,只需要在生成定义中将触发器类型选择为“Build every week on the following days”,选择从星期一到星期日的全部天数,然后再指定一下构造时间(例如:17:00)即可。
设置完毕后,每天的17点,Team Foundation Build就会依照生成定义中指定的内容自动执行构造动作同时会生成一份构造报告供我们查看。
以上主要是根据MSDN中MSBuild和Team Foundation等章节进行整理,试图通过个人理解来阐述一些基本概念,为开展自动构造活动进行一些基础准备。
分享到:
相关推荐
本书主要介绍了微软构建工具集的核心组件——MSBuild以及如何在软件开发过程中高效利用MSBuild和Team Foundation Build进行自动化构建和持续集成。 #### 二、MSBuild简介 MSBuild(Microsoft Build Engine)是微软...
- **协同工作**:MSBuild作为构建引擎被Team Foundation Build调用,实现更高级别的自动化构建和部署。 - **流程优化**:通过集成MSBuild和TFB,可以显著提高软件开发团队的工作效率,减少人为错误。 #### 四、...
最后,`TeamBuild.SonarQube.Integration.dll`则表明SonarScanner支持与Microsoft Team Foundation Build的集成,可以在持续集成/持续部署(CI/CD)流程中无缝集成代码质量检查。 SonarScanner的使用方法通常包括以下...
《Microsoft.Press.Inside.the.Microsoft.Build.Engine.Using.MSBuild.and.Team.Foundation.Build.Jan.2009》这本书深入探讨了微软的构建引擎——MSBuild和Team Foundation Build(TFBuild)在2009年1月时的最新技术...
### Microsoft Press Inside the Microsoft Build Engine 第二版:深入解析 MSBuild 和 Team Foundation Build #### 书籍概述 《Microsoft Press Inside the Microsoft Build Engine: Using MSBuild and Team ...
MSBuild项目SDK用于配置和扩展构建。 有哪些可用的SDK? 支持创建遍历项目,这些遍历项目是MSBuild项目,可指示在构建树时要包括的项目。 对于大型项目树,它们是Visual Studio解决方案文件的替代品。 支持以代码...
本书《Microsoft Press Supplement to Inside the Microsoft Build Engine 2nd》作为《Inside the Microsoft Build Engine: Using MSBuild and Team...,扩展了对MSBuild 4.5和Team Foundation Build 2012的新知识...
- 集成了Team Foundation Build,增强了持续集成能力。 3. **版本14(VS2015)**: - 支持.NET Framework 4.6及更高版本。 - Roslyn编译器进一步优化,支持C# 6和VB.NET 14的新特性。 - 引入了Task Runner ...
【Msbuild_AutoDeploy.zip】是一个自动部署工具包,主要用于基于Microsoft Build Engine(MSBuild)的项目构建和部署。这个压缩包包含了一系列辅助脚本和配置文件,旨在简化TFS(Team Foundation Server)的文件下载...
在VSTS中,Team Build是一个核心组件,用于自动化构建和测试过程,帮助团队有效地管理和监控软件的开发质量。 **Team Build流程** Team Build流程是由一系列可自定义的工作流步骤组成的,这些步骤包括但不限于获取...
7. **Team Foundation Build服务**:对于进行持续集成和持续交付的团队来说,这个组件特别重要,因为它允许在服务器上自动构建和测试项目。 安装Visual C++ 2015 Build Tools后,开发者可以利用这些工具创建、构建...
6. **Team Foundation Build (TFBuild)**:对于需要持续集成和版本控制的团队,TFBuild提供了自动化构建和测试的框架。 7. **其他工具**:如性能分析器、调试器、代码分析工具等,帮助开发者进行性能优化和问题排查...
- 自动化集成:可以轻松地与Visual Studio或Team Foundation Build (TFB)等构建工具集成。 - 配置选项:允许用户自定义扫描范围,例如只分析特定的项目或目录。 - 快速反馈:在构建过程中立即提供分析结果,以便开发...
以及团队构建(Team Build),用于自动化编译、测试和发布过程。 在C#中与TFS交互,通常会使用到以下关键知识点: 1. **TFS API**:微软提供了Team Foundation Client Object Model,这是一组.NET库,允许开发者在...
6. **团队服务集成**:VS Build Tools可以轻松地与Visual Studio Team Services(现称为Azure DevOps)或其他持续集成/持续部署(CI/CD)系统集成,实现自动化构建和测试流程。 通过安装VS Build Tools,开发者可以...
8. **Team Foundation Build**: 对于团队协作开发,TFS(Team Foundation Server)的构建服务可以帮助自动化构建和测试流程。 9. **CMake支持**: CMake是一个跨平台的构建系统,可以生成针对不同IDE和构建系统的...
16. **自动化工作流**:学习使用MSBuild脚本和Team Foundation Build进行自动化构建和测试。 17. **UI设计**:掌握使用设计器创建用户界面,包括WinForms、WPF和Web Forms。 18. **异常处理**:理解如何有效地使用...
关于使用Team Foundation Build服务器进行生成,如果目标是构建包含Silverlight 2.0项目的Web应用程序,那么必须在Team Build Server计算机上同时安装Visual Studio 2008和Silverlight Tools 2。这是因为生成过程...
同时,可以利用TFS(Team Foundation Server,现称为Azure DevOps Server)或GitHub Actions等CI/CD工具来触发这个过程。当代码提交或分支合并时,这些服务会自动执行构建、测试和打包步骤。 对于依赖项管理,NuGet...