MSBuild是.NET平台下的构建工具。
概览
MSBuild也就是用于构建应用的Microsoft Build Engine,它提供一个XML Schema用于project文件来控制构建平台process、build软件。
可以使用Visual Studio或者调用MSBuild.exe来完成这个操作。VS里边的project文件(.csproj
、vbproj
、vcxproj
等)包含MSBuild XML代码,这些代码将在使用IDE build project的时候被运行。
在VS 2017里面使用的MSBuild版本是15,现在MSBuild装在VS的每个版本的文件夹中,比如C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild
。也可以使用这个powershell命令来定位MSBuild:vssetup.powershell
。
MSBuildToolsPath
不再是一个固定的位置。默认情况下将是相对于VS安装位置的MSBuild\15.0\Bin
文件夹中。
MSBuild的相关概念
Properties
Properties是键值对,可以用来配置builds。
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
在整个project文件中,properties通过$(<PropertyName>)
的方式被引用,比如使用上面的BuildDir属性,则用$(BuildDir)
即可。
Properties的值可以被redefine。
MSBuild中保留的或众所周知的properties:
MSBuildBinPath
: 当前使用的MSBuild binaries位置的绝对路径,例如C:\Windows\Microsoft.Net\Framework\<versionNumber>
MSBuildExtensionsPath
MSBuildProjectFile
: project文件的完整文件名,例如MyApp.proj
完整的见MSBuild reserved and well-known properties
可以使用Condition
attribute来为一个property提供默认值,如果这个property没有value则给它设置一个。比如
<ToolsPath Condition="''$(TOOLSPATH)' == ''">c:\tools</ToolsPath>
除了在project文件中做配置,也可以在命令行执行的时候设置property。如:
msbuild file.proj -property:Flavor=Debug
msbuild file.proj -p:Flavor=Debug
msbuild file.proj -p:Flavor=Debug;Platform=x86
msbuild file.proj -p:Flavor=Debug -p:Platform=x86
环境变量也会被认为是properties,并且自动被MSBuild装载进来。
Items
Items是build system的输入,通常代表文件。
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
file2.cs是append在file1.cs之后的,也可以结合**
、*
、?
用wildcard模式,例如:
<CSFile Include="*.cs"/>
或者
<ItemGroup>
<CSFile Include="*.cs" Exclude="DoNotBuild.cs"/>
</ItemGroup>
Targets
解释如何将tasks以特定的顺序组合到一起,并在命令行调用构建过程的各个部分。
感觉类似Ant的targets。详细的见MSBuild targets
Tasks
显示如何创建可以被MSBuild使用的可执行代码单元去执行原子的build操作。
Special Characters
% $ @ ' ; ? *