其实说来惭愧,在几天之前,其实自己也不知道MSBuild是什么,只是自己在玩Jenkins的时候才知道了MSBuild,下面言归正传,记录下自己的学习内容。
什么是MSBuild?
MSBuild是Microsoft Build Engine的缩写,其是一个应用构建平台。我们在VS中使用“生成解决方案”的背后就是依赖MSBuild来实现,但我们完全可以在cmd中使用MSBuild来完成应用的构建。
在我们的解决方案中,有一个后缀为csproj的文件。该文件定义了使用什么及如何生成我们的解决方案,下面我们将分别介绍csproj中的基本元素。
Property
Property以name/value的方式来进行定义,其中主要声明了解决方案生成过程所需要的参数,可以$(“name”)的方式进行访问。如下xml中Platform表示应用的目标平台为AnyCPU,我们可以直接更改该文件,也可以通过VS界面修改该值。
Debug AnyCPU {12F320FB-647E-4BAB-9E15-D2F164A0896B} Exe PropertiesBuildTest1 BuildTest1v4.5 512
Item
Item用来标识项目的引用资源及源代码文件,其格式为
< Compile Include="Program.cs" />
Target
Target是编译的任务单元,其根据taget的指令执行相应的动作,如下target表示执行编译的过程,使用所有Compile包含的内容,其中@(Compile)表示所有Compile的所有文件。
如下target表示创建一个文件夹,其名称为为key值为BuildDir的Property的值。
Task
在target中的csc及makedir就是具体的task,MSBuild的具体执行是由相应的task来完成,我们可以以如下的方式 实现ITask接口,来自定义task。
using System;
using Microsoft.Build.framework;
using Microsoft.Build.Utilities;
namespace MyTasks
{
public class SimpleTask : Task
{
public override bool Execute()
{
return true;
}
}
}在target中使用这个Task
根据Property,Item,Target,Task的定义MSbuild就可以完成应用的构建了,除了在VS中生成解决方案,我们可以在cmd中使用msbuild.exe xxxxxx.Csproj来完成构建。
不同的VS对应不同版本的msbuild,其中VS2013的msbuild一般在C:Program Files (x86)MSBuild12.0目录下,VS2017的msbuild在vs的安装目录下。
原文出处:https://www.cnblogs.com/SuperChan/p/10240780.html
作者:守望那片天空



