我正在尝试为MSBuild属性设置默认值。说我从这开始:
<Choose>
<When Condition="..something..">
<PropertyGroup>
...
<MySetting>true</MySetting>
<PropertyGroup>
</When>
...
</Choose>
如果条件不成立,则MySetting将为''。所以不应该把它设置为假?
<PropertyGroup>
<MySetting Condition="'$(MySetting)'==''">false</MySetting>
</PropertyGroup>
稍后,我想在条件中使用MySetting,而不必测试=='true',如下所示:
<PropertyGroup Condition="$(MySetting)">
...
</PropertyGroup>
然而,当我将这个项目加载到Visual Studio中时,它会抱怨指定的条件“$(MySetting)”的计算结果为“”而不是布尔值。
因此,检查''将属性赋值为false的条件似乎不正确。我做错了什么?
答案 0 :(得分:6)
在MSBuild中,您正在处理字符串,因此您获得了''
而不是false
...如果您想将其默认为'false'
并通过命令行覆盖,只需在脚本中声明现有条件块上方的属性组:
<PropertyGroup>
<MySetting>false</MySetting>
</PropertyGroup>
下面的条件块可以将其设置为true,或者您也可以通过命令行设置它,如下所示:
MSBuild.exe MyMSBuildFile.csproj /p:MySetting=true
答案 1 :(得分:3)
如果你想更好地声明属性的默认值,那么使用Chose就是在属性上执行它:
<PropertyGroup>
<MySetting Condition=" '$(MySetting)'=='' ">true</MySetting>
</PropertyGroup>
对于条件总是将左侧和右侧包裹在''中,即使您正在处理应该是bool值的内容。因此,将您的第二个属性组更改为:
<PropertyGroup Condition=" '$(MySetting)'=='true' ">
</PropertyGroup>