MSBuild属性
MSBuild 属性
MSBuild属性是键值对的集合,提前声明好这些属性之后,整个项目的生成都可以引用这些属性。
属性名不区分大小写。
属性都是写在 PropertyGroup 标签中。
1、声明属性:声明一个属性 BuildDir,属性值为:BuildBin
<PropertyGroup> <BuildDir>BuildBin</BuildDir> </PropertyGroup>
2、使用属性:属性声明后,在整个项目文件中都可以引用这个属性。
具体引用方法 $(PropertyName)
,如下代码,在AllPath属性中 引用了BuildDir这个属性的属性值
<PropertyGroup> <BuildDir>BuildBin</BuildDir> <AllPath>$(BuildDir)</AllPath> </PropertyGroup>
3、系统属性:官方为我们定义好了一些预定义的属性,我们可以直接使用
预留属性属性的链接为: https://learn.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-reserved-and-well-known-properties?view=vs-2022 比如:MSBuildVersion属性表述当前MSBuild.exe工具的版本号,我们可以在属性定义中引用这个预定义属性。代码中我们声明了一个属性SysProperty,属性值为:msbuild.exe version is 加上当前mshuild.exe的版本号。
<PropertyGroup> <SysProperty>msbuild.exe version is $(MSBuildVersion)</SysProperty> </PropertyGroup>
4、环境变量:在项目文件中引用环境变量。
如果想引用电脑中的环境变量,可以通过 $(PropertyName) 方法来引用环境变量,引用方法其实和引用预定义属性的格式是一样的。比如:环境变量中医保都有Path变量,我们在项目文件中就可以引用它。
<PropertyGroup> <MyPath>$(Path)</MyPath> </PropertyGroup>
5、注册表:在项目文件中引用注册表属性
注意:(在 .NET SDK 版本的 MSBuild (dotnet build) 中,不支持注册表属性。)
6、全局属性
在使用msbuild.exe编译的时候,可以通过命令行参数的方式(-property或-p)设置属性,这里设置的属性可以全局使用,可以覆盖已有的属性值(如果项目文件中已经声明过这个属性的话)。如下:设置了Configuration的属性值为DEBUG。那么在项目文件中,都可以通过 $(Configuration) 引用这个属性值
msbuild.exe MyProj.proj -p:Configuration=DEBUG
6、属性函数
在项目文件中,可以执行c#的一些函数来获取动态属性值,如:Today这个属性,利用DateTime的静态函数计算值。
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
7、属性值不仅仅可以存储字符串,也可以存储任意的xml结构数据。
点击查看代码
<PropertyGroup>
<Person>
<Info>
<Name>caoruipeng</Name>
<Age>11</Age>
</Info>
</Person>
</PropertyGroup>
8、条件判断(属性组)
在PropertyGroup属性组标签上,添加Condition条件表达式,如果表达式为true,那么属性组里面的属性都会生效。否则就不生效。
<PropertyGroup Condition="'$(TestName)'=='ZhangSan'"> <Score>60.3</Score> </PropertyGroup>
9、条件判断(属性)
在属性标签上新增添加Condition条件表达式,如果表达式为true,那么属性组里面的属性都会生效。否则就不生效。
<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>