You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix XALNS7015: run _LinkAssembliesNoShrink before R2R in non-trimmed builds
Move _LinkAssembliesNoShrink from the outer build into the inner (per-RID) build
using BeforeTargets="_PrepareForReadyToRunCompilation". This ensures assembly
modifications (FixAbstractMethods, AddKeepAlives, FindJavaObjects, etc.) operate
on pure IL assemblies BEFORE crossgen2 creates R2R images, preventing Mono.Cecil
from attempting to write mixed-mode assemblies.
Changes:
- Rewrite _LinkAssembliesNoShrink to run in the inner build, consuming
@(ResolvedFileToPublish) instead of @(ResolvedAssemblies), writing to
an intermediate linked-noshrink/ directory
- Properly classify framework vs user assemblies by known names (matching
the trimmed path in _AfterILLinkAdditionalSteps)
- Update ResolvedFileToPublish so R2R and publish consume modified copies
- Simplify _PrepareAssemblies: populate _ResolvedAssemblies unconditionally
from @(ResolvedAssemblies) (no longer redirect through intermediate dir)
- Extend _CopySidecarXmlToAssemblyPaths to handle both trimmed (linked/)
and non-trimmed (android/linked-noshrink/) sidecar XML files
- Remove _LinkAssembliesNoShrink from _LinkAssemblies DependsOnTargets
- Remove Assert.Ignore workarounds in BuildTest.SimilarAndroidXAssemblyNames
and LinkerTests.AndroidAddKeepAlives for CoreCLR non-trimmed Release builds
Fixes: #11025
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy file name to clipboardExpand all lines: src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.AssemblyResolution.targets
// This currently fails with the following exception:
2183
-
//
2184
-
// error XALNS7015: System.NotSupportedException: Writing mixed-mode assemblies is not supported
2185
-
// at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
2186
-
// at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
2187
-
// at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters)
2188
-
// at Mono.Cecil.AssemblyDefinition.Write(String fileName, WriterParameters parameters)
2189
-
// at Xamarin.Android.Tasks.SaveChangedAssemblyStep.ProcessAssembly(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 197
2190
-
// at Xamarin.Android.Tasks.AssemblyPipeline.Run(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs:line 26
2191
-
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunPipeline(AssemblyPipeline pipeline, ITaskItem source, ITaskItem destination) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 175
2192
-
Assert.Ignore("CoreCLR: fails because of a Mono.Cecil lack of support");
// This currently fails with the following exception:
474
-
//
475
-
// error XALNS7015: System.NotSupportedException: Writing mixed-mode assemblies is not supported
476
-
// at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
477
-
// at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters)
478
-
// at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters)
479
-
// at Mono.Cecil.AssemblyDefinition.Write(String fileName, WriterParameters parameters)
480
-
// at Xamarin.Android.Tasks.SaveChangedAssemblyStep.ProcessAssembly(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 197
481
-
// at Xamarin.Android.Tasks.AssemblyPipeline.Run(AssemblyDefinition assembly, StepContext context) in src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs:line 26
482
-
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunPipeline(AssemblyPipeline pipeline, ITaskItem source, ITaskItem destination) in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 175
483
-
// at Xamarin.Android.Tasks.AssemblyModifierPipeline.RunTask() in src/Xamarin.Android.Build.Tasks/Tasks/AssemblyModifierPipeline.cs:line 123
484
-
Assert.Ignore("CoreCLR: fails because of a Mono.Cecil lack of support");
0 commit comments