Skip to content

[.NET 8] Mono workload doesn't import Microsoft.NET.Runtime.MonoAOTCompiler.Task #77385

Description

@jonathanpeppers

Description

As seen here: dotnet/android#7451

It appears that building a net7.0-android project with a .NET 8 SDK skips this import:

<!-- ======== C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\sdk-manifests\8.0.200\microsoft.net.workload.mono.toolchain.net7\WorkloadManifest.targets ======= -->
<Project>
    <Import Condition="'$(TargetsNet7)' == 'true' and '$(RunAOTCompilation)' == 'true' and '$(UsingBrowserRuntimeWorkload)' == 'true'" Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoAOTCompiler.Task.net7" />

And then a Release build with AOT happens to work, because we have these imports as a fallback:

https://github.com/xamarin/xamarin-android/blob/fb636843e9661599a8a2cf070cb101b4a946513b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets#L19-L31

(We're wanting to remove these imports from .NET 8, and stop supporting the $(AotAssemblies) brought forward from Xamarin.Android)

The end result is several build warnings, such as:

Warnings
    C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.1\targets\Microsoft.Android.Sdk.Aot.targets(27,5): warning MSB4011: "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x86\8.0.0-alpha.1.22507.5\Sdk\Sdk.props" cannot be imported again. It was already imported at "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\sdk-manifests\8.0.200\microsoft.net.workload.mono.toolchain.net7\WorkloadManifest.targets (9,9)". This is most likely a build authoring error. This subsequent import will be ignored. [C:\a\_work\1\a\TestRelease\10-22_07.31.58\temp\DotNetPublishTrue[net7.0 android 33]\UnnamedProject.csproj]
    C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.1\targets\Microsoft.Android.Sdk.Aot.targets(28,5): warning MSB4011: "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x64\8.0.0-alpha.1.22507.5\Sdk\Sdk.props" cannot be imported again. It was already imported at "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\sdk-manifests\8.0.200\microsoft.net.workload.mono.toolchain.net7\WorkloadManifest.targets (10,9)". This is most likely a build authoring error. This subsequent import will be ignored. [C:\a\_work\1\a\TestRelease\10-22_07.31.58\temp\DotNetPublishTrue[net7.0 android 33]\UnnamedProject.csproj]
    C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.1\targets\Microsoft.Android.Sdk.Aot.targets(29,5): warning MSB4011: "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm\8.0.0-alpha.1.22507.5\Sdk\Sdk.props" cannot be imported again. It was already imported at "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\sdk-manifests\8.0.200\microsoft.net.workload.mono.toolchain.net7\WorkloadManifest.targets (11,9)". This is most likely a build authoring error. This subsequent import will be ignored. [C:\a\_work\1\a\TestRelease\10-22_07.31.58\temp\DotNetPublishTrue[net7.0 android 33]\UnnamedProject.csproj]
    C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.1\targets\Microsoft.Android.Sdk.Aot.targets(30,5): warning MSB4011: "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\packs\Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm64\8.0.0-alpha.1.22507.5\Sdk\Sdk.props" cannot be imported again. It was already imported at "C:\a\_work\1\s\xamarin-android\bin\Release\dotnet\sdk-manifests\8.0.200\microsoft.net.workload.mono.toolchain.net7\WorkloadManifest.targets (12,9)". This is most likely a build authoring error. This subsequent import will be ignored. [C:\a\_work\1\a\TestRelease\10-22_07.31.58\temp\DotNetPublishTrue[net7.0 android 33]\UnnamedProject.csproj]

But I think the core problem might be $(UsingBrowserRuntimeWorkload) isn't set?

Reproduction Steps

  • Install .NET 8 and the Android workload
  • dotnet new android, then change TFM to net7.0-android
  • dotnet build -c Release -bl

See the warnings in the build log.

Actual behavior

Building net7.0-android apps with the .NET 8 SDK emits build warnings.

Expected behavior

Building net7.0-android apps with the .NET 8 SDK should have no build warnings.

Regression?

It works to multitarget .NET 7 SDK, building net6.0-android apps, so yes?

Known Workarounds

Targeting net8.0-android and net6.0-android with the .NET 8 SDK appear to work.

Configuration

.NET SDK 8.0.200-alpha.1.22511.1
.NET runtime 8.0.0-alpha.1.22507.5

Other information

.binlog: dotnet8-7-multitargeting.zip

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions