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

sco*_*obi 5 msbuild

我正在尝试为MSBuild属性设置默认值.说我从这开始:

<Choose>
    <When Condition="..something..">
        <PropertyGroup>
            ...
            <MySetting>true</MySetting>
        <PropertyGroup>
    </When>
    ...
</Choose>
Run Code Online (Sandbox Code Playgroud)

如果条件不成立,则MySetting将为''.所以不应该把它设置为假?

<PropertyGroup>
    <MySetting Condition="'$(MySetting)'==''">false</MySetting>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

稍后,我想在条件中使用MySetting,而不必测试=='true',如下所示:

<PropertyGroup Condition="$(MySetting)">
    ...
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

然而,当我将这个项目加载到Visual Studio中时,它抱怨指定的条件"$(MySetting)"的计算结果为""而不是布尔值.

因此,检查''将属性赋值为false的条件似乎不正确.我究竟做错了什么?

Nic*_*ver 6

在MSBuild中,您正在处理字符串,因此您将获得''而不是false...如果要将其默认为'false'并通过命令行覆盖,只需在脚本中的现有条件块上方声明一个属性组:

<PropertyGroup>
    <MySetting>false</MySetting>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

您在下面的条件块可以将其设置为true,或者您也可以通过命令行设置它,如下所示:

MSBuild.exe MyMSBuildFile.csproj /p:MySetting=true
Run Code Online (Sandbox Code Playgroud)