在MSBuild中创建属性并使用布尔表达式的结果

12

是否有一种简洁的方法来创建在MSBuild中使用的"布尔"属性?我可以在Condition属性中评估表达式,但无法在CreateProperty任务的Value属性中进行评估。

我想做类似于这样的事情:

<CreateProperty Value="'$(IncludeInBuild)'=='' OR 
    '$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath), 
    $(IncludeInBuild)'=='True'">
    <Output TaskParameter="Value" PropertyName="MatchesInclude" />
</CreateProperty>

那给我的不是真或假,而是

''=='' OR '$([System.Text...

我能否评估一个布尔表达式并根据结果设置一个属性? 我现在的解决办法只是在需要的地方重复使用这个表达式作为条件属性。


你提供的布尔表达式中括号有问题,因此不清楚RegEx pattern字符串来自何处和/或您要匹配哪个输入字符串以生成布尔值。也许这些无关的问题是为什么你(错误地?)认为你需要首先使用MSBuild CreateProperty任务的原因? - Glenn Slayden
1个回答

17

如何创建一个默认属性“false”,并使用条件来分配真值(true),如果该条件为真?

<PropertyGroup>
    <MatchesInclude>false</MatchesInclude>
    <MatchesInclude Condition="'$(IncludeInBuild)'=='' OR 
    '$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath), 
    $(IncludeInBuild)'=='True'">true</MatchesInclude>
</PropertyGroup>

这实际上是我最终所做的。 - Rob
1
然而,这种方法并不优雅,因为在条件语句中使用变量必须采用形式为“$(MatchesInclude)== 'true'”的方式。我们希望有像Exists函数一样直接求值为布尔值的功能,这样就可以使用类似于“Condition = $(MatchesInclude)”这样的语句来提高可读性。 - Tom West
2
@TomWest 只需将其转换为 $([System.Convert]::ToBoolean(false))$([System.Convert]::ToBoolean(true)) - OwnageIsMagic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接