Skip to content

Move RemoveResourceDesigner trimmer step to post-trim pipeline#10977

Draft
sbomer wants to merge 7 commits intomainfrom
dev/sbomer/remove-resource-designer
Draft

Move RemoveResourceDesigner trimmer step to post-trim pipeline#10977
sbomer wants to merge 7 commits intomainfrom
dev/sbomer/remove-resource-designer

Conversation

@sbomer
Copy link
Member

@sbomer sbomer commented Mar 19, 2026

Migrate RemoveResourceDesignerStep from an ILLink custom step to a
post-trimming IAssemblyModifierPipelineStep, following the same pattern
used for StripEmbeddedLibrariesStep and PostTrimmingAddKeepAlivesStep.

  • Add PostTrimmingRemoveResourceDesignerStep with self-contained logic
    from LinkDesignerBase/RemoveResourceDesignerStep, using Action
    for logging instead of ILLink's Context.LogMessage
  • Add AndroidLinkResources property to PostTrimmingPipeline task and
    pre-load all assemblies when enabled (the step needs a two-phase scan)
  • Remove RemoveResourceDesignerStep and GetAssembliesStep from ILLink
    custom steps in targets
  • Remove AndroidLinkConfiguration.cs and RemoveResourceDesignerStep.cs
    from ILLink csproj (no longer needed there)
  • Delete GetAssembliesStep.cs (dead code, only served RemoveResourceDesignerStep)

sbomer added 7 commits March 16, 2026 11:10
Migrate AddKeepAlivesStep out of the ILLink custom step pipeline into a
standalone MSBuild task that runs AfterTargets="ILLink", following the
same pattern established by StripEmbeddedLibraries in #10894.

Core IL-rewriting logic is extracted into AddKeepAlivesHelper, shared by
both the new task (trimmed builds) and the existing pipeline step
(non-trimmed builds via LinkAssembliesNoShrink).
Replace DefaultAssemblyResolver with DirectoryAssemblyResolver (ReadWrite=true)
to avoid file handle conflicts on Windows. The directory resolver caches all
assemblies (both explicit and dependency-resolved), preventing duplicate file
opens that caused IOException when the same assembly was opened as both a
dependency and a primary target.
Replace standalone AddKeepAlives and StripEmbeddedLibraries MSBuild tasks
with a single PostTrimmingPipeline task that opens assemblies once (via
DirectoryAssemblyResolver with ReadWrite) and runs both modifications in
a single pass. Extract StripEmbeddedLibrariesStep as an
IAssemblyModifierPipelineStep for reuse.
…Step pattern

Use List<IAssemblyModifierPipelineStep> with StripEmbeddedLibrariesStep and
PostTrimmingAddKeepAlivesStep instead of calling helpers directly. Move the
IsFrameworkAssembly check into StripEmbeddedLibrariesStep.ProcessAssembly and
remove all outer-loop filtering so each step handles its own guards internally.
…line

Migrate RemoveResourceDesignerStep from an ILLink custom step to a
post-trimming IAssemblyModifierPipelineStep, following the same pattern
used for StripEmbeddedLibrariesStep and PostTrimmingAddKeepAlivesStep.

- Add PostTrimmingRemoveResourceDesignerStep with self-contained logic
  from LinkDesignerBase/RemoveResourceDesignerStep, using Action<string>
  for logging instead of ILLink's Context.LogMessage
- Add AndroidLinkResources property to PostTrimmingPipeline task and
  pre-load all assemblies when enabled (the step needs a two-phase scan)
- Remove RemoveResourceDesignerStep and GetAssembliesStep from ILLink
  custom steps in targets
- Remove AndroidLinkConfiguration.cs and RemoveResourceDesignerStep.cs
  from ILLink csproj (no longer needed there)
- Delete GetAssembliesStep.cs (dead code, only served RemoveResourceDesignerStep)
…eDesignerStep

The old ILLink RemoveResourceDesignerStep is no longer compiled into
Xamarin.Android.Build.Tasks, so the PostTrimming prefix is unnecessary.
Also remove AndroidLinkConfiguration.cs from compilation as it was only
used by the old ILLink step.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant