Bug 50454 - device-specific build directories not cleaned with xbuild /t:Clean
Summary: device-specific build directories not cleaned with xbuild /t:Clean
Status: RESOLVED FIXED
Alias: None
Product: iOS
Classification: Xamarin
Component: MSBuild (show other bugs)
Version: master
Hardware: PC Mac OS
: --- normal
Target Milestone: Untriaged
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2016-12-20 16:02 UTC by Jeffrey Stedfast
Modified: 2016-12-20 16:37 UTC (History)
1 user (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments

Description Jeffrey Stedfast 2016-12-20 16:02:12 UTC
Up until yesterday, the MSBuild targets had the following logic:

<Target Name="_CleanDeviceSpecificOutput" Condition="'$(_CanOutputAppBundle)' == 'true'">
    <RemoveDir SessionId="$(BuildSessionId)" Condition="'$(IsMacEnabled)' == 'true'" Directories="$(IntermediateOutputPath)build-*;$(OutputPath)build-*" />
</Target>

The problem with this logic is that RemoveDir does not interpret wildcards.

You might think that the solution would be to do:

<ItemGroup>
    <_DeviceSpecificBuildDirs Include="$(IntermediateOutputPath)build-*" />
    <_DeviceSpecificBuildDirs Include="$(OutputPath)build-*" />
</ItemGroup>

buuuuuut, you'd be wrong because while the Include parameter above normally expands, it only matches *files* and not directories. Since those wildcards do not match any files, they evaluate to nothingness.

Sebastien suggested the idea that perhaps what should be done is that these build-* directories should be:

$(IntermediateOutputPath)device-builds\build-*
$(OutputPath)device-builds\build-*

This way, the _CleanDeviceSpecificOutput target could simply RemoveDir $(IntermediateOutputPath)device-builds and $(OutputPath)device-builds

Note You need to log in before you can comment on or make changes to this bug.