为什么这个MSBuild脚本没有像我期望的那样设置属性?

时间:2010-01-25 23:58:21

标签: msbuild

我正在尝试为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的条件似乎不正确。我做错了什么?

2 个答案:

答案 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>