diff --git a/src/Build.OM.UnitTests/Definition/ProjectItem_Tests.cs b/src/Build.OM.UnitTests/Definition/ProjectItem_Tests.cs index 9299381c7ca..d94e4ab56e0 100644 --- a/src/Build.OM.UnitTests/Definition/ProjectItem_Tests.cs +++ b/src/Build.OM.UnitTests/Definition/ProjectItem_Tests.cs @@ -2774,6 +2774,17 @@ public void UpdateShouldImportMetadataFromReferencedItem() ObjectModelHelpers.AssertItemHasMetadata(expectedMetadataC, items[4]); } + [Fact] + public void OptimizedRemoveOperationRespectsCondition() + { + string content = @" + + "; + IList items = ObjectModelHelpers.GetItemsFromFragment(content, true); + + items[0].EvaluatedInclude.ShouldBe("InitialValue"); + } + [Theory] [InlineData(true)] [InlineData(false)] diff --git a/src/Build/Evaluation/LazyItemEvaluator.RemoveOperation.cs b/src/Build/Evaluation/LazyItemEvaluator.RemoveOperation.cs index 546ef225a4e..bcfe47d6c84 100644 --- a/src/Build/Evaluation/LazyItemEvaluator.RemoveOperation.cs +++ b/src/Build/Evaluation/LazyItemEvaluator.RemoveOperation.cs @@ -38,7 +38,7 @@ protected override void ApplyImpl(ImmutableList.Builder listBuilder, I new BuildEventFileInfo(string.Empty), "OM_MatchOnMetadataIsRestrictedToOnlyOneReferencedItem"); - if (_matchOnMetadata.IsEmpty && ItemspecContainsASingleBareItemReference(_itemSpec, _itemElement.ItemType)) + if (_matchOnMetadata.IsEmpty && ItemspecContainsASingleBareItemReference(_itemSpec, _itemElement.ItemType) && _conditionResult) { // Perf optimization: If the Remove operation references itself (e.g. ) // then all items are removed and matching is not necessary