序言
在其他机器上运行了我自己的一些构建脚本之后,我发现它们无法正常工作,因为svn
工具没有安装,而MSBuildLastTaskResult
属性上的某些条件不正确(正在使用)条件内的大写字母)。
问题
我不明白的是,某些属性的条件不区分大小写,而对于其他属性,它们区分大小写。请看下面的例子:
<Project DefaultTargets="Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyProperty>FOoBAR</MyProperty>
</PropertyGroup>
<Target Name="Test">
<!-- Making sure `MSBuildLastTaskResult` will return `false` -->
<Copy SourceFiles="Does.Not.Exists" ContinueOnError="true"/>
<!-- Testing `MSBuildLastTaskResult` -->
<Message Text="Hello" Importance="high" Condition="'$(MSBuildLastTaskResult)' == 'false'" />
<Message Text="World" Importance="high" Condition="'$(MSBuildLastTaskResult)' == 'False'" />
<!-- Testing `MyProperty` -->
<Message Text="ALL CAPS" Importance="high" Condition="'$(MyProperty)' == 'FOOBAR'" />
<Message Text="all lower" Importance="high" Condition="'$(MyProperty)' == 'foobar'" />
</Target>
</Project>
它将显示在控制台中:
Hello
ALL CAPS
all lower
因此MyProperty
上的条件似乎不区分大小写,MSBuildLastTaskResult
上的条件是(〜?或者可能包括进一步的类型检查?〜)。
我在这里有点困惑。 msbuild在比较属性时如何/何时做出案例/类型检测?
答案 0 :(得分:1)
MsBuild 在这里不区分大小写,问题在于第二个消息任务MSBuildLastTaskResult
实际上是上一个任务被调用的结果,这是第一个Message任务和不再是复制任务了。如果你交换两个消息行,比如
<Message Text="World" Importance="high" Condition="'$(MSBuildLastTaskResult)' == 'FaLse'" />
<Message Text="Hello" Importance="high" Condition="'$(MSBuildLastTaskResult)' == 'false'" />
输出将是
World
ALL CAPS
all lower