-
Notifications
You must be signed in to change notification settings - Fork 565
Open
Labels
needs-triageIssues that need to be assigned.Issues that need to be assigned.
Description
Summary
The _FixRootAssembly target in Microsoft.Android.Sdk.ILLink.targets uses %(RootMode) without fully qualifying it as %(TrimmerRootAssembly.RootMode). This causes MSB4096 when user-defined TrimmerRootAssembly items don't have the RootMode metadata.
Repro
Create a MAUI app with TrimmerRootAssembly items that don't specify RootMode:
<ItemGroup>
<TrimmerRootAssembly Include="Microsoft.Maui" />
<TrimmerRootAssembly Include="Microsoft.Maui.Controls" />
</ItemGroup>Error
error MSB4096: The item "Microsoft.Maui" in item list "TrimmerRootAssembly" does not define a value for metadata "RootMode". In order to use this metadata, either qualify it by specifying %(TrimmerRootAssembly.RootMode), or ensure that all items in this list define a value for this metadata.
In Microsoft.Android.Sdk.ILLink.targets:
<Target Name="_FixRootAssembly" AfterTargets="PrepareForILLink">
<ItemGroup>
<TrimmerRootAssembly Update="@(TrimmerRootAssembly)" Condition=" '%(RootMode)' == 'EntryPoint' " RootMode="All" />
</ItemGroup>
</Target>The condition uses %(RootMode) which triggers MSBuild item batching. When batching, MSBuild requires all items to have the metadata defined.
Related: dotnet/runtime#123972 (comment)
Discovered in dotnet/maui#33756
Copilot
Metadata
Metadata
Labels
needs-triageIssues that need to be assigned.Issues that need to be assigned.