{
internal class BuildTaskItem : BuildItem, IBuildTask
{
+ BuildTaskItemGroup parent;
Project project;
public bool ContinueOnError {
internal BuildTaskItem (Project project, XmlElement itemElement, BuildTaskItemGroup parentItemGroup)
: base (itemElement, parentItemGroup)
{
+ this.parent = parentItemGroup;
this.project = project;
}
+ bool CheckCondition (string condition)
+ {
+ if (string.IsNullOrEmpty (condition))
+ return true;
+ var ce = ConditionParser.ParseCondition (condition);
+ return ce.BoolEvaluate (project);
+ }
+
+ bool CheckCondition ()
+ {
+ return CheckCondition (parent.Condition) && CheckCondition (Condition);
+ }
+
public bool Execute ()
{
- if (Condition == String.Empty)
- Evaluate (project, true);
- else {
- ConditionExpression ce = ConditionParser.ParseCondition (Condition);
- Evaluate (project, ce.BoolEvaluate (project));
- }
+ var condition = CheckCondition ();
+ Evaluate (project, condition);
return true;
}
public IEnumerable<string> GetAttributes ()
{
+ foreach (XmlAttribute attrib in parent.XmlElement.Attributes)
+ yield return attrib.Value;
+
foreach (XmlAttribute attrib in XmlElement.Attributes)
yield return attrib.Value;
}
</Target>
</Project>", "A", "B");
}
+
+ [Test]
+ public void ItemGroupInsideTarget_Condition ()
+ {
+ ItemGroupInsideTarget (
+ @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"" ToolsVersion=""4.0"">
+ <PropertyGroup>
+ <Summer>true</Summer>
+ </PropertyGroup>
+ <ItemGroup>
+ <Weather Include='Sun;Rain' />
+ </ItemGroup>
+
+ <Target Name='Main'>
+ <ItemGroup Condition=""'$(Summer)' != 'true'"">
+ <Weather Include='Snow' />
+ </ItemGroup>
+ <Message Text='%(Weather.Identity)' />
+ </Target>
+ </Project>", "Sun", "Rain");
+ }
#endif
[Test]