Skip to content

Migrate StripEmbeddedLibraries from ILLink step#10695

Open
sbomer wants to merge 6 commits intomainfrom
dev/sbomer/stripembedded-step
Open

Migrate StripEmbeddedLibraries from ILLink step#10695
sbomer wants to merge 6 commits intomainfrom
dev/sbomer/stripembedded-step

Conversation

@sbomer
Copy link
Member

@sbomer sbomer commented Jan 14, 2026

Changes this from an ILLink step to run in AssemblyModifierPipeline.

I'm hitting some failures locally that might have to do with the modiifier pipeline modifying assemblies in-place - opening this to see if it repros in ci.

@jonathanpeppers
Copy link
Member

There are .binlog files as test attachments for each test, but a lot of builds get the error:

(_AfterILLinkAdditionalSteps target) -> 
         C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024: System.IO.IOException: The requested operation cannot be performed on a file with a user-mapped section open. : 'C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\obj\Release\android-arm64\R2R\FormsViewGroup.dll'. [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Mono.Cecil.ModuleDefinition.GetFileStream(String fileName, FileMode mode, FileAccess access, FileShare share) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Mono.Cecil.AssemblyDefinition.Write(String fileName, WriterParameters parameters) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Xamarin.Android.Tasks.SaveChangedAssemblyStep.ProcessAssembly(AssemblyDefinition assembly, StepContext context) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Xamarin.Android.Tasks.AssemblyPipeline.Run(AssemblyDefinition assembly, StepContext context) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunPipeline(AssemblyPipeline pipeline, ITaskItem source, ITaskItem destination) [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunTask() [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]
       C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.1.99-ci.dev-sbomer-stripembedded-step.92\tools\Xamarin.Android.Common.targets(1501,3): error XAAMP7024:    at Microsoft.Android.Build.Tasks.AndroidTask.Execute() [C:\a\_work\1\a\TestRelease\01-14_23.21.02\temp\SmokeTestBuildWithSpecialCharactersTrueFalseCoreCLR\テスト\テスト.csproj]

@sbomer
Copy link
Member Author

sbomer commented Jan 15, 2026

And similarly on linux:

/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015: System.NotSupportedException: Writing mixed-mode assemblies is not supported [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters) [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Mono.Cecil.AssemblyDefinition.Write(String fileName, WriterParameters parameters) [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Xamarin.Android.Tasks.SaveChangedAssemblyStep.ProcessAssembly(AssemblyDefinition assembly, StepContext context) [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Xamarin.Android.Tasks.AssemblyPipeline.Run(AssemblyDefinition assembly, StepContext context) [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunPipeline(AssemblyPipeline pipeline, ITaskItem source, ITaskItem destination) [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunTask() [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]
/mnt/vss/_work/1/s/bin/Release/dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.99-ci.dev-sbomer-stripembedded-step.92/tools/Xamarin.Android.Common.targets(1501,3): error XAAMP7015:    at Microsoft.Android.Build.Tasks.AndroidTask.Execute() [/mnt/vss/_work/1/a/TestRelease/01-14_23.21.26/temp/CheckAssemblyCountsTrueTrueCoreCLR/UnnamedProject.csproj]

…ded-step

# Conflicts:
#	src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.ILLink.targets
Copilot AI review requested due to automatic review settings February 12, 2026 22:59
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR migrates the StripEmbeddedLibraries class from an ILLink custom step to an IAssemblyModifierPipelineStep. The class is renamed to StripEmbeddedLibrariesStep and refactored to work with the AssemblyModifierPipeline infrastructure instead of relying on ILLink's BaseStep and Annotations API.

Changes:

  • Renamed and refactored StripEmbeddedLibraries to StripEmbeddedLibrariesStep implementing IAssemblyModifierPipelineStep
  • Integrated the step into AssemblyModifierPipeline.BuildPipeline between FindJavaObjectsStep and SaveChangedAssemblyStep
  • Removed ILLink custom step registration from Microsoft.Android.Sdk.TypeMap.LlvmIr.targets

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.

File Description
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj Added StripEmbeddedLibrariesStep.cs to compilation
src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs Integrated the new step into the pipeline before SaveChangedAssemblyStep
src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.TypeMap.LlvmIr.targets Removed the ILLink custom step registration for StripEmbeddedLibraries
src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/StripEmbeddedLibrariesStep.cs Refactored from BaseStep to IAssemblyModifierPipelineStep, updated to use StepContext and TaskLoggingHelper

…g to separate output directory

_AfterILLinkAdditionalSteps was reading and writing assemblies to the
same file path (@(ResolvedAssemblies) for both SourceFiles and
DestinationFiles). This caused a crash in Mono.Cecil when
SaveChangedAssemblyStep wrote a modified assembly back to the same
memory-mapped file it was read from, triggering an
AccessViolationException in PatchRawMethodBody.

Fix by writing outputs to $(MonoAndroidIntermediateAssemblyDir), matching
the pattern used by _LinkAssembliesNoShrink. This also enables proper
file-list-based incrementalism and preserves ILLink outputs for correct
incremental builds.
…pping mixed-mode metadata

Mono.Cecil cannot write mixed-mode assemblies, throwing NotSupportedException.
Before writing, strip R2R metadata (set ILOnly, clear ILLibrary, reset Architecture)
matching ILLink's OutputStep behavior. The native R2R code is discarded since the
assembly was modified and would need re-crossgen anyway.
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.

2 participants

Comments