<!-- Clean -->
<Target Name="_RecordCleanFile"
DependsOnTargets="_GetCompileOutputsForClean">
+
+ <!-- add to list of previous writes for this platform/config -->
+
+ <ReadLinesFromFile File="$(IntermediateOutputPath)$(CleanFile)">
+ <Output TaskParameter="Lines" ItemName="PreviousFileWrites"/>
+ </ReadLinesFromFile>
+
+ <RemoveDuplicates Inputs="@(PreviousFileWrites);@(FileWrites->'%(FullPath)')">
+ <Output TaskParameter="Filtered" ItemName="CombinedFileWrites"/>
+ </RemoveDuplicates>
+
<WriteLinesToFile
File="$(IntermediateOutputPath)$(CleanFile)"
- Lines="@(FileWrites->'%(FullPath)')"
+ Lines="@(CombinedFileWrites)"
Overwrite="true"/>
</Target>
</PropertyGroup>
<Target Name="_GetCompileOutputsForClean">
+ <!-- assembly and debug file in the *intermediate output path* -->
<CreateItem Include="@(IntermediateAssembly)" Condition="Exists('@(IntermediateAssembly)')">
<Output TaskParameter="Include" ItemName="FileWrites"/>
</CreateItem>
<Target Name="_GetCleanFileWrites"
DependsOnTargets="_GetCompileOutputsForClean">
<ReadLinesFromFile File="$(IntermediateOutputPath)$(CleanFile)">
- <Output TaskParameter="Lines" ItemName="FileWrites"/>
+ <Output TaskParameter="Lines" ItemName="PreviousFileWrites"/>
</ReadLinesFromFile>
</Target>
<Target Name="AfterClean" />
<Target Name="CoreClean" DependsOnTargets="_GetCleanFileWrites">
- <Delete Files="@(FileWrites)" TreatErrorsAsWarnings="true"/>
+ <Delete Files="@(PreviousFileWrites);@(FileWrites)" TreatErrorsAsWarnings="true"/>
+
+ <!-- all previous files written for this platform/config have been deleted,
+ we can safely remove the file list now -->
+ <Delete Files="$(IntermediateOutputPath)$(CleanFile)" TreatErrorsAsWarnings="true" />
</Target>
</Project>