From d54f88b4317090e12962d232e01f457b0dc4827e Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 10 Feb 2025 10:30:41 -0600 Subject: [PATCH 1/5] [Xamarin.Android.Build.Tasks] temporarily support .NET 8 in .NET 10 Context: https://github.com/dotnet/android-libraries/issues/1084#issuecomment-2627870179 Context: https://aka.ms/maui-support-policy dotnet/android-libraries needs to build with: net8.0-android;net10.0-android Typically each .NET release, we only support N-1 `$(TargetFrameworks)` and import `Eol.targets` to emit an error message on older versions. We can make some .NET workload changes to support .NET 8 in a .NET 10 SDK until .NET 8 goes out of support in May. I also updated some MSBuild tests to ensure .NET 8 projects build & run. --- .../create-packs/Microsoft.NET.Sdk.Android.proj | 4 ++-- eng/Versions.props | 2 ++ .../WorkloadManifest.in.json | 13 +++++++++++++ .../WorkloadManifest.in.targets | 12 +++++++++++- .../Tests/Xamarin.Android.Build.Tests/XASdkTests.cs | 12 +++++++++++- .../Tests/InstallAndRunTests.cs | 6 ++++-- 6 files changed, 43 insertions(+), 6 deletions(-) diff --git a/build-tools/create-packs/Microsoft.NET.Sdk.Android.proj b/build-tools/create-packs/Microsoft.NET.Sdk.Android.proj index dc761f56110..823dcd4823e 100644 --- a/build-tools/create-packs/Microsoft.NET.Sdk.Android.proj +++ b/build-tools/create-packs/Microsoft.NET.Sdk.Android.proj @@ -36,12 +36,12 @@ about the various Microsoft.Android workloads. + Replacements="@WORKLOAD_VERSION@=$(WorkloadVersion);@NET_PREVIOUS_VERSION@=$(AndroidNetPreviousVersion);@NET8_PREVIOUS_VERSION@=$(AndroidNet8PreviousVersion)"> + Replacements="@NET_PREVIOUS_VERSION@=$(AndroidNetPreviousVersion);@NET8_PREVIOUS_VERSION@=$(AndroidNet8PreviousVersion)"> diff --git a/eng/Versions.props b/eng/Versions.props index d2294fc794a..e9e98021e0f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -15,6 +15,8 @@ 35.0.24 $(MicrosoftAndroidSdkWindowsPackageVersion) + + 34.0.147 diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json index 03d881a8008..e0f055ffbf8 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json @@ -61,6 +61,19 @@ "linux-arm64": "Microsoft.Android.Sdk.Linux" } }, + "Microsoft.Android.Sdk.net8": { + "kind": "sdk", + "version": "@NET8_PREVIOUS_VERSION@", + "alias-to": { + "osx-x64": "Microsoft.Android.Sdk.Darwin", + "osx-arm64": "Microsoft.Android.Sdk.Darwin", + "win-x86": "Microsoft.Android.Sdk.Windows", + "win-x64": "Microsoft.Android.Sdk.Windows", + "win-arm64": "Microsoft.Android.Sdk.Windows", + "linux-x64": "Microsoft.Android.Sdk.Linux", + "linux-arm64": "Microsoft.Android.Sdk.Linux" + } + }, "Microsoft.Android.Ref.35": { "kind": "framework", "version": "@WORKLOAD_VERSION@" diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets index a738a9c1e70..be21b6b25a3 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets @@ -4,8 +4,10 @@ Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '10.0')) " /> + + Condition=" $([MSBuild]::VersionLessThanOrEquals($(TargetFrameworkVersion), '7.0')) " /> @@ -16,6 +18,14 @@ /> + + + + diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs index c8d302467d3..20e919022ee 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs @@ -46,6 +46,11 @@ public void DotNetNew ([Values ("android", "androidlib", "android-bindinglib", " } static readonly object[] DotNetPackTargetFrameworks = new object[] { + new object[] { + "net8.0", + "android", + 34, + }, new object[] { "net9.0", "android", @@ -145,6 +150,11 @@ public String Say (String quote) { } static readonly object[] DotNetTargetFrameworks = new object[] { + new object[] { + "net8.0", + "android", + 34, + }, new object[] { "net9.0", "android", @@ -200,7 +210,7 @@ public void DotNetPublish ([Values (false, true)] bool isRelease, [ValueSource(n var apiLevel = (int)data[2]; //FIXME: will revisit this in a future PR - if (dotnetVersion == "net9.0") { + if (dotnetVersion != "net10.0") { Assert.Ignore ("error NETSDK1185: The Runtime Pack for FrameworkReference 'Microsoft.Android.Runtime.34.android-arm' was not available. This may be because DisableTransitiveFrameworkReferenceDownloads was set to true."); } diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index 2954bec5eae..b5fb3352900 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -897,10 +897,12 @@ public void CheckResouceIsOverridden () [Test] [Category ("WearOS")] - public void DotNetInstallAndRunPreviousSdk ([Values (false, true)] bool isRelease) + public void DotNetInstallAndRunPreviousSdk ( + [Values (false, true)] bool isRelease, + [Vlaues ("net8.0-android", "net9.0-android") string targetFramework) { var proj = new XamarinFormsAndroidApplicationProject () { - TargetFramework = "net9.0-android", + TargetFramework = targetFramework, IsRelease = isRelease, EnableDefaultItems = true, }; From a6a9bd443964dc759a8e2a27c91451b8c1f9cae3 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 10 Feb 2025 11:03:31 -0600 Subject: [PATCH 2/5] Update InstallAndRunTests.cs --- tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index b5fb3352900..df7e7d9241d 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -899,7 +899,7 @@ public void CheckResouceIsOverridden () [Category ("WearOS")] public void DotNetInstallAndRunPreviousSdk ( [Values (false, true)] bool isRelease, - [Vlaues ("net8.0-android", "net9.0-android") string targetFramework) + [Values ("net8.0-android", "net9.0-android")] string targetFramework) { var proj = new XamarinFormsAndroidApplicationProject () { TargetFramework = targetFramework, From 29fea76c886cb9d01f5a6890d2bf0761cc5910b3 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 10 Feb 2025 12:42:42 -0600 Subject: [PATCH 3/5] Update WorkloadManifest.in.json --- .../Microsoft.NET.Sdk.Android/WorkloadManifest.in.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json index e0f055ffbf8..e5a8b8b360b 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json @@ -15,6 +15,8 @@ ], "platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "osx-x64", "osx-arm64" ], "extends" : [ + "microsoft-net-runtime-android-net8", + "microsoft-net-runtime-android-aot-net8", "microsoft-net-runtime-android-net9", "microsoft-net-runtime-android-aot-net9", "microsoft-net-runtime-android", From 41c34026e1dd24a9eeb2bf6d1a8db513878ec92d Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 10 Feb 2025 15:46:42 -0600 Subject: [PATCH 4/5] Update WorkloadManifest.in.json --- .../Microsoft.NET.Sdk.Android/WorkloadManifest.in.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json index e5a8b8b360b..0ee9fe4f021 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json @@ -6,6 +6,7 @@ "packs": [ "Microsoft.Android.Sdk.net10", "Microsoft.Android.Sdk.net9", + "Microsoft.Android.Sdk.net8", "Microsoft.Android.Ref.35", "Microsoft.Android.Runtime.Mono.35.android-arm", "Microsoft.Android.Runtime.Mono.35.android-arm64", From 2c28030142a52d645926cd784cfb064eb606f998 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 10 Feb 2025 15:47:52 -0600 Subject: [PATCH 5/5] Update WorkloadManifest.in.targets --- .../Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets index be21b6b25a3..5eaec3dbada 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.targets @@ -26,7 +26,7 @@ /> - +