RemoveDuplicates task

Removes duplicate items from the specified item collection.

Parameters

The following table describes the parameters of the RemoveDuplicates task.

Parameter Description
Filtered Optional ITaskItem[] output parameter.

Contains an item collection with all duplicate items removed. The order of the input items is preserved, keeping the first instance of each duplicate item.
HadAnyDuplicates Optional Boolean output parameter.

If true duplicate items were found, false otherwise.
Inputs Optional ITaskItem[] parameter.

The item collection to remove duplicate items from.

Remarks

This task is case insensitive and does not compare item metadata when determining duplicates.

In addition to the parameters listed above, this task inherits parameters from the TaskExtension class, which itself inherits from the Task class. For a list of these additional parameters and their descriptions, see TaskExtension base class.

Example

The following example uses the RemoveDuplicates task to remove duplicate items from the MyItems item collection. When the task is complete, the FilteredItems item collection contains one item.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <MyItems Include="MyFile.cs"/>
        <MyItems Include="MyFile.cs">
            <Culture>fr</Culture>
        </MyItems>
        <MyItems Include="myfile.cs"/>
    </ItemGroup>

    <Target Name="RemoveDuplicateItems">
        <RemoveDuplicates
            Inputs="@(MyItems)">
            <Output
                TaskParameter="Filtered"
                ItemName="FilteredItems"/>
        </RemoveDuplicates>
    </Target>
</Project>

The following example shows that the RemoveDuplicates task preserves its input order. When the task is complete, the FilteredItems item collection contains the items MyFile2.cs, MyFile1.cs, and MyFile3.cs in that order.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <MyItems Include="MyFile2.cs"/>
        <MyItems Include="MyFile1.cs" />
        <MyItems Include="MyFile3.cs" />
        <MyItems Include="myfile1.cs"/>
    </ItemGroup>

    <Target Name="RemoveDuplicateItems">
        <RemoveDuplicates
            Inputs="@(MyItems)">
            <Output
                TaskParameter="Filtered"
                ItemName="FilteredItems"/>
            <Output
                TaskParameter="HadAnyDuplicates"
                PropertyName="_HadAnyDuplicates"/>
        </RemoveDuplicates>
    </Target>
</Project>

See also