Skip to content

Conversation

@jonpryor
Copy link
Contributor

@jonpryor jonpryor commented Jul 5, 2023

Fixes: #8095

Context: f99fc81

Initialize $(MonoAndroidAssetsDirIntermediate) earlier in Xamarin.Android.Common.targets, so that the existing $(_XARemapMembersFilePath) property (f99fc81) is able to correctly use it.

Fixes: dotnet#8095

Context: f99fc81

Initialize `$(MonoAndroidAssetsDirIntermediate)` earlier in
`Xamarin.Android.Common.targets`, so that the existing
`$(_XARemapMembersFilePath)` property (f99fc81) is able to correctly
use it.
Comment on lines 446 to 449
<MakeDir
Condition=" '@(_AndroidMamMappingFile->Count())' != '0' "
Directories="$(MonoAndroidAssetsDirIntermediate)/xa-internal"
Directories="$(MonoAndroidAssetsDirIntermediate)xa-internal"
/>
Copy link
Member

@jonathanpeppers jonathanpeppers Jul 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait, does this really fix it? MSBuild does things in passes, a simplification/example of the ordering:

  1. Imports & Properties
  2. Item Groups
  3. Targets

Would $(MonoAndroidAssetsDirIntermediate) have always have been set in pass 1, and these targets are pass 3?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While $(MonoAndroidAssetsDirIntermediate) would always be set in pass 1, there is still an ordering issue between properties, because properties are set in file order:

  1. $(_XARemapMembersFilePath) was set first: https://github.com/xamarin/xamarin-android/blob/69b4ab056badcb5d25a5faf39d08baeb1b8b7010/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets#L458
  2. $(MonoAndroidAssetsDirIntermediate) was set afterward: https://github.com/xamarin/xamarin-android/blob/69b4ab056badcb5d25a5faf39d08baeb1b8b7010/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets#L885

When (1) is evaluated, $(MonoAndroidAssetsDirIntermediate) hasn't been set yet, thus $(_XARemapMembersFilePath) will be xa-internal/xa-remap-members.xml (which has the nice property of matching the bug report).

Indeed, when viewing the diagnostic build log, we see:

_XARemapMembersFilePath = xa-internal/xa-remap-members.xml

By moving $(MonoAndroidAssetsDirIntermediate) to be defined before $(_XARemapMembersFilePath) is defined, we ensure that $(MonoAndroidAssetsDirIntermediate) doesn't expand to the empty string, because it will have been set by the time it is used.

@dellis1972 dellis1972 merged commit d407817 into dotnet:main Jul 6, 2023
grendello added a commit to grendello/xamarin-android that referenced this pull request Jul 6, 2023
* main:
  Bump to dotnet/installer@28d4a6b4be 8.0.100-preview.7.23330.16 (dotnet#8162)
  [Xamarin.Android.Build.Tasks] Move MonoAndroidAssetsDirIntermediate (dotnet#8166)
grendello added a commit to grendello/xamarin-android that referenced this pull request Jul 6, 2023
* main:
  Bump to dotnet/installer@28d4a6b4be 8.0.100-preview.7.23330.16 (dotnet#8162)
  [Xamarin.Android.Build.Tasks] Move MonoAndroidAssetsDirIntermediate (dotnet#8166)
  [xaprepare] update Debian dependencies for current unstable (trixie) (dotnet#8169)
  [CI] Use dotnet test slicer in nightly tests (dotnet#8154)
  [Xamarin.Android.Build.Tasks] MarshalMethodsAssemblyRewriter+new file (dotnet#8151)
  Bump to dotnet/installer@d2a244f560 8.0.100-preview.7.23325.5 (dotnet#8142)
@github-actions github-actions bot locked and limited conversation to collaborators Jan 22, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

_XARemapMembersFilePath is not being treated as a path in the obj folder

3 participants