Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

net8.0-android->net9-android linker error on publish #111338

Open
DevronTLA opened this issue Jan 13, 2025 · 6 comments
Open

net8.0-android->net9-android linker error on publish #111338

DevronTLA opened this issue Jan 13, 2025 · 6 comments
Assignees
Labels
area-Tools-ILLink .NET linker development as well as trimming analyzers regression-from-last-release untriaged New issue has not been triaged by the area owner

Comments

@DevronTLA
Copy link

Description

I've converted my project from net8-android to net9-android successfully. I was able to publish fine in net8, but on net9 the publish fails with a linker error:

 ILLink : error IL1012: IL Trimmer has encountered an unexpected error. Please report the issue at https://aka.ms/report-illink
    Fatal error in IL Linker
    Unhandled exception. System.NotSupportedException: TypeDefinition cannot be resolved from 'Mono.Cecil.RequiredModifierType' type
       at Mono.Linker.LinkContext.Resolve(TypeReference typeReference)
       at MonoDroid.Tuner.FixAbstractMethodsStep.CompareTypes(TypeReference iType, TypeReference tType) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixAbstractMethodsStep.cs:line 167
       at MonoDroid.Tuner.FixAbstractMethodsStep.HaveSameSignature(TypeReference iface, MethodDefinition iMethod, MethodDefinition tMethod) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixAbstractMethodsStep.cs:line 215
       at MonoDroid.Tuner.FixAbstractMethodsStep.FixAbstractMethods(TypeDefinition type) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixAbstractMethodsStep.cs:line 267
       at MonoDroid.Tuner.FixAbstractMethodsStep.ProcessType(TypeDefinition type) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixAbstractMethodsStep.cs:line 86
       at MonoDroid.Tuner.FixAbstractMethodsStep.<Initialize>b__0_0(TypeDefinition type) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixAbstractMethodsStep.cs:line 39
       at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference, DependencyInfo reason, MessageOrigin origin)
       at Mono.Linker.Steps.MarkStep.MarkField(FieldDefinition field, DependencyInfo& reason, MessageOrigin& origin)
       at Mono.Linker.Steps.MarkStep.MarkField(FieldReference reference, DependencyInfo reason, MessageOrigin& origin)
       at Mono.Linker.Steps.MarkStep.MarkFieldVisibleToReflection(FieldReference field, DependencyInfo& reason, MessageOrigin& origin)
       at Mono.Linker.Steps.MarkStep.MarkFieldsVisibleToReflection(TypeDefinition type, DependencyInfo& reason, MessageOrigin origin, Boolean markBackingFieldsOnlyIfPropertyMarked)
       at Mono.Linker.Steps.MarkStep.MarkEntireType(TypeDefinition type, DependencyInfo& reason, MessageOrigin origin)
       at Mono.Linker.Steps.MarkStep.MarkEntireAssembly(AssemblyDefinition assembly, MessageOrigin origin)
       at Mono.Linker.Steps.MarkStep.MarkAssembly(AssemblyDefinition assembly, DependencyInfo reason, MessageOrigin origin)
       at Mono.Linker.Steps.MarkStep.MarkModule(ModuleDefinition module, DependencyInfo reason, MessageOrigin origin)
       at Mono.Linker.Steps.MarkStep.ProcessMarkedPending()
       at Mono.Linker.Steps.MarkStep.Initialize()
       at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
       at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
       at Mono.Linker.Pipeline.Process(LinkContext context)
       at Mono.Linker.Driver.Run(ILogger customLogger)
       at Mono.Linker.Driver.Main(String[] args)

I'm not really sure where/what is causing this error, or the steps to narrow it down. Happy to provide more information with some guidance.

Reproduction Steps

convert csproj from:

 <TargetFramework>net8.0-android</TargetFramework>

to

 <TargetFramework>net9.0-android</TargetFramework>

and using:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <Optimize>true</Optimize>
    <!-- <AndroidLinkMode>None</AndroidLinkMode> -->
    <AndroidLinkTool>r8</AndroidLinkTool>
    <PublishTrimmed>true</PublishTrimmed>
    <!-- <TrimMode>copy</TrimMode> -->
    <RunAOTCompilation>true</RunAOTCompilation>
  </PropertyGroup>

publish command line is: dotnet publish /bl -v diag -f net9.0-android

if I set config as:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <Optimize>true</Optimize>
    <!-- <AndroidLinkMode>None</AndroidLinkMode> -->
    <AndroidLinkTool>r8</AndroidLinkTool>
    <PublishTrimmed>false</PublishTrimmed>
    <!-- <TrimMode>copy</TrimMode> -->
    <RunAOTCompilation>false</RunAOTCompilation>
  </PropertyGroup>

the publish succeeds but with very large aab files.

Expected behavior

publish command to successfully complete as per net8-android.

Actual behavior

dotnet publish fails with above error.

Regression?

yes, worked ok in net8-android.

Known Workarounds

none viable found.

Configuration

  • net9.0-android
  • windows 11
  • android-arm;android-arm64;android-x86;android-x64
  • no
  • n/a

Other information

🤷

@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Jan 13, 2025
@dotnet-policy-service dotnet-policy-service bot added the untriaged New issue has not been triaged by the area owner label Jan 13, 2025
@DevronTLA DevronTLA changed the title net8.0-androd->net9-android linker error on publish net8.0-android->net9-android linker error on publish Jan 13, 2025
@huoyaoyuan huoyaoyuan added area-Tools-ILLink .NET linker development as well as trimming analyzers and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Jan 13, 2025
Copy link
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

@DevronTLA
Copy link
Author

Any advise on this? is it something I can fix in my project or is an internal linker thing?

This is currently blocking my upgrade path to net9.

cheers

@agocke
Copy link
Member

agocke commented Jan 28, 2025

@sbomer can you take a look?

@DevronTLA
Copy link
Author

@sbomer, any progress on this?

cheers

@sbomer
Copy link
Member

sbomer commented Feb 19, 2025

@DevronTLA from the stacktrace I can't tell what the problem is. Would you be able to share a repro?

@DevronTLA
Copy link
Author

@sbomer I'm having trouble reproducing this error in a basic project. Any clues on how to zero in on this error? The stack trace doesn't really offer any clues about where to look, and my project is quite large, so I don't really want to start dismantling it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-Tools-ILLink .NET linker development as well as trimming analyzers regression-from-last-release untriaged New issue has not been triaged by the area owner
Projects
Status: No status
Development

No branches or pull requests

5 participants