[Xamarin.Android.Build.Tasks] incremental build improvements #2320
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes: #2247
We currently have two targets that fail to build incrementally:
_ResolveLibraryProjectImports
_GeneratePackageManagerJava
Both of these targets declare
Outputs
, but don't always update thetimestamp of the output file. They used
CopyIfChanged
logic, so theywon't write to the file if nothing changed.
However...
We can't just add
<Touch/>
calls here either, as theOutputs
ofthese targets are
Inputs
to other slow targets (_CompileJava
,_UpdateAndroidResgen
, and friends). If we used<Touch/>
here,things would be worse and trigger the slow targets to run.
So the only option here is to use a "stamp" file, this allows these
targets to properly build incrementally and not trigger other targets.
I updated a
IncrementalBuildTest
to include a test case checking allthree of these targets.
Future changes:
same problem, and so I will likely need to add many new stamp files.
files in
$(IntermediateOutputPath)stamp\
or$(_AndroidStampDirectory)
.used as an
Output
.Documentation:
I also started some initial documentation on "MSBuild Best Practices",
which we can expand upon in future PRs. See the
Stamp Files
sectionon what is relevant in this PR.