From 4b1ec579327190c18f519b6cd236b058040a0be5 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 26 Jun 2024 19:19:43 +0100 Subject: [PATCH] [Xamarin.Android.Build.Tasks] Support VS "Build Acceleration" (#9042) Fixes: https://github.com/dotnet/android/issues/8581 Fixes: https://dev.azure.com/devdiv/DevDiv/_workitems/edit/2051915 Context: https://github.com/dotnet/project-system/blob/9c9efad1d986e38232cbd74bec9dbd794883a91c/docs/build-acceleration.md Context: https://github.com/dotnet/project-system/blob/dd9431b535a6158060d7ab64597276eb2c354aab/docs/design-time-builds.md#targets-that-run-during-design-time-builds Context: https://github.com/dotnet/project-system/blob/dd9431b535a6158060d7ab64597276eb2c354aab/docs/up-to-date-check.md#default-inputs-and-outputs Context: https://github.com/dotnet/project-system/blob/dd9431b535a6158060d7ab64597276eb2c354aab/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/DesignTimeTargets/Microsoft.Managed.DesignTime.targets#L448-L449 Context: dc3ccf28cdbe9f8c0a705400b83c11a85c81a980 The Visual Studio Fast Up-to-Date Check (FUTDC) flags `_Microsoft.Android.Resource.Designer.dll` (dc3ccf28) as newer than the output assembly (which it is). But this flagging also causes it to incorrectly think the build is out of date. WARNING: Potential build performance issue in 'Foo.csproj'. The project does not appear up-to-date after a successful build: Input ResolvedCompilationReference item 'obj\Debug\net8.0-android\_Microsoft.Android.Resource.Designer.dll' (2023-12-11 11:34:12.546) has been modified since the last successful build started. Fix this by removing `_Microsoft.Android.Resource.Designer.dll` from the list of files checked. To do so, we *must* remove the item from the `@(ReferencePathWithRefAssemblies)` item group *before* the [`CollectResolvedCompilationReferencesDesignTime`][0] target runs. This is because that Target uses the [`Returns` attribute][1]; it turns out you cannot modify the ItemGroup that is being returned via the `Returns` attribute on a target. Unfortunately there isn't a way to unit test this since the Fast Update check *only* runs in Visual Studio. The targets do not even exist on the command line. [0]: https://github.com/dotnet/project-system/blob/dd9431b535a6158060d7ab64597276eb2c354aab/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/DesignTimeTargets/Microsoft.Managed.DesignTime.targets#L448-L449 [1]: https://learn.microsoft.com/visualstudio/msbuild/target-element-msbuild?view=vs-2022 --- .../Xamarin.Android.Resource.Designer.targets | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets index d0943e16bb9..389d1857e65 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets @@ -196,6 +196,28 @@ Copyright (C) 2016 Xamarin. All rights reserved. + + + + <_ResourceDesignerFiles Include="%(ReferencePathWithRefAssemblies.Identity)" + Condition="'%(ReferencePathWithRefAssemblies.OriginalPath)' == '$(_GenerateResourceDesignerAssemblyOutput)'" + /> + + + +