Przeglądaj źródła

Add .NET 8 target (Avalonia 11.1) (#14535)

      * Add .NET 8 target to packable projects

* Update test projects

* Update sample projects to target .NET 8

* Update main Avalonia package to target .NET 8 as well

* Remove MSBuildEnableWorkloadResolver hack and some minor change

* Use net8.0 in nuke build as well

* Pin 8.0.0 SDK

* Adjust API validation

* Pin a valid version

* Remove net461 target from Avalonia package

* Remove unused net6.0 target from Avalonia.Designer.HostApp

* Adjust API diff

* Update ControlCatalog.Android.csproj

* Remove MSBuildEnableWorkloadResolver

* Fix Browser issues on .NET 8

* Fix .NET 8 error

* Fix merge conflicts

* Replace explicit TFMs in .csproj files with a centralized registry

* Fix merge conflict

* Fix AvsLegacyWindowsTargetFrameworks and add hacks for the tests

* Update XCode project CommandLineArgument

---------

Co-authored-by: Nikita Tsukanov <[email protected]>
Max Katz 1 rok temu
rodzic
commit
326ef7c9fd
100 zmienionych plików z 274 dodań i 184 usunięć
  1. 1 0
      Avalonia.sln
  2. 1 1
      Directory.Build.props
  3. 94 0
      api/Avalonia.Android.nupkg.xml
  4. 3 3
      azure-pipelines-integrationtests.yml
  5. 3 3
      azure-pipelines.yml
  6. 15 0
      build/TargetFrameworks.props
  7. 7 7
      global.json
  8. 1 1
      native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme
  9. 10 3
      nukebuild/ApiDiffHelper.cs
  10. 14 4
      nukebuild/Build.cs
  11. 3 1
      nukebuild/_build.csproj
  12. 1 1
      packages/Avalonia/Avalonia.csproj
  13. 1 1
      samples/AppWithoutLifetime/AppWithoutLifetime.csproj
  14. 1 1
      samples/BindingDemo/BindingDemo.csproj
  15. 1 2
      samples/ControlCatalog.Android/ControlCatalog.Android.csproj
  16. 1 1
      samples/ControlCatalog.Browser.Blazor/ControlCatalog.Browser.Blazor.csproj
  17. 1 2
      samples/ControlCatalog.Browser/ControlCatalog.Browser.csproj
  18. 9 6
      samples/ControlCatalog.Browser/EmbedSample.Browser.cs
  19. 1 15
      samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj
  20. 2 2
      samples/ControlCatalog.Tizen/ControlCatalog.Tizen.csproj
  21. 2 2
      samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
  22. 1 1
      samples/ControlCatalog/ControlCatalog.csproj
  23. 1 0
      samples/Directory.Build.props
  24. 1 1
      samples/Generators.Sandbox/Generators.Sandbox.csproj
  25. 1 1
      samples/GpuInterop/GpuInterop.csproj
  26. 1 1
      samples/IntegrationTestApp/IntegrationTestApp.csproj
  27. 1 2
      samples/MobileSandbox.Android/MobileSandbox.Android.csproj
  28. 1 2
      samples/MobileSandbox.Browser/MobileSandbox.Browser.csproj
  29. 1 1
      samples/MobileSandbox.Desktop/MobileSandbox.Desktop.csproj
  30. 1 1
      samples/MobileSandbox.iOS/MobileSandbox.iOS.csproj
  31. 1 1
      samples/MobileSandbox/MobileSandbox.csproj
  32. 1 1
      samples/PlatformSanityChecks/PlatformSanityChecks.csproj
  33. 1 1
      samples/Previewer/Previewer.csproj
  34. 1 1
      samples/ReactiveUIDemo/ReactiveUIDemo.csproj
  35. 1 1
      samples/RemoteDemo/RemoteDemo.csproj
  36. 1 1
      samples/RenderDemo/RenderDemo.csproj
  37. 2 2
      samples/SafeAreaDemo.Android/SafeAreaDemo.Android.csproj
  38. 1 3
      samples/SafeAreaDemo.Desktop/SafeAreaDemo.Desktop.csproj
  39. 1 1
      samples/SafeAreaDemo.iOS/SafeAreaDemo.iOS.csproj
  40. 1 1
      samples/SafeAreaDemo/SafeAreaDemo.csproj
  41. 1 1
      samples/Sandbox/Sandbox.csproj
  42. 1 1
      samples/VirtualizationDemo/VirtualizationDemo.csproj
  43. 1 1
      samples/interop/WindowsInteropTest/WindowsInteropTest.csproj
  44. 1 2
      src/Android/Avalonia.Android/Avalonia.Android.csproj
  45. 1 1
      src/Avalonia.Base/Avalonia.Base.csproj
  46. 1 1
      src/Avalonia.Controls.ColorPicker/Avalonia.Controls.ColorPicker.csproj
  47. 1 1
      src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj
  48. 1 1
      src/Avalonia.Controls.ItemsRepeater/Avalonia.Controls.ItemsRepeater.csproj
  49. 1 1
      src/Avalonia.Controls/Avalonia.Controls.csproj
  50. 1 1
      src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
  51. 1 1
      src/Avalonia.Desktop/Avalonia.Desktop.csproj
  52. 1 1
      src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj
  53. 1 1
      src/Avalonia.Dialogs/Avalonia.Dialogs.csproj
  54. 1 1
      src/Avalonia.Fonts.Inter/Avalonia.Fonts.Inter.csproj
  55. 1 1
      src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj
  56. 1 1
      src/Avalonia.Metal/Avalonia.Metal.csproj
  57. 1 1
      src/Avalonia.Native/Avalonia.Native.csproj
  58. 1 1
      src/Avalonia.OpenGL/Avalonia.OpenGL.csproj
  59. 1 1
      src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj
  60. 1 1
      src/Avalonia.Remote.Protocol/Avalonia.Remote.Protocol.csproj
  61. 1 1
      src/Avalonia.Themes.Fluent/Avalonia.Themes.Fluent.csproj
  62. 1 1
      src/Avalonia.Themes.Simple/Avalonia.Themes.Simple.csproj
  63. 1 1
      src/Avalonia.X11/Avalonia.X11.csproj
  64. 2 1
      src/Browser/Avalonia.Browser.Blazor/Avalonia.Browser.Blazor.csproj
  65. 2 5
      src/Browser/Avalonia.Browser/Avalonia.Browser.csproj
  66. 0 6
      src/Browser/Avalonia.Browser/Interop/CanvasHelper.cs
  67. 9 14
      src/Browser/Avalonia.Browser/build/Avalonia.Browser.targets
  68. 0 13
      src/Browser/Avalonia.Browser/build/interop.js
  69. 8 2
      src/Browser/Avalonia.Browser/webapp/modules/avalonia/canvas.ts
  70. 1 1
      src/Headless/Avalonia.Headless.NUnit/Avalonia.Headless.NUnit.csproj
  71. 1 1
      src/Headless/Avalonia.Headless.Vnc/Avalonia.Headless.Vnc.csproj
  72. 1 1
      src/Headless/Avalonia.Headless.XUnit/Avalonia.Headless.XUnit.csproj
  73. 1 1
      src/Headless/Avalonia.Headless/Avalonia.Headless.csproj
  74. 1 1
      src/Linux/Avalonia.LinuxFramebuffer/Avalonia.LinuxFramebuffer.csproj
  75. 1 1
      src/Markup/Avalonia.Markup.Xaml.Loader/Avalonia.Markup.Xaml.Loader.csproj
  76. 1 1
      src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
  77. 1 1
      src/Markup/Avalonia.Markup/Avalonia.Markup.csproj
  78. 1 1
      src/Skia/Avalonia.Skia/Avalonia.Skia.csproj
  79. 1 5
      src/Tizen/Avalonia.Tizen/Avalonia.Tizen.csproj
  80. 1 1
      src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj
  81. 1 1
      src/Windows/Avalonia.Win32.Interoperability/Avalonia.Win32.Interoperability.csproj
  82. 1 1
      src/Windows/Avalonia.Win32/Avalonia.Win32.csproj
  83. 1 1
      src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs
  84. 1 2
      src/iOS/Avalonia.iOS/Avalonia.iOS.csproj
  85. 1 1
      src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj
  86. 1 1
      tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj
  87. 1 1
      tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj
  88. 1 1
      tests/Avalonia.Controls.DataGrid.UnitTests/Avalonia.Controls.DataGrid.UnitTests.csproj
  89. 1 1
      tests/Avalonia.Controls.ItemsRepeater.UnitTests/Avalonia.Controls.ItemsRepeater.UnitTests.csproj
  90. 1 1
      tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
  91. 1 1
      tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj
  92. 1 1
      tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj
  93. 8 5
      tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs
  94. 1 1
      tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj
  95. 1 1
      tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj
  96. 1 1
      tests/Avalonia.Generators.Tests/Avalonia.Generators.Tests.csproj
  97. 1 1
      tests/Avalonia.Headless.NUnit.UnitTests/Avalonia.Headless.NUnit.UnitTests.csproj
  98. 1 1
      tests/Avalonia.Headless.XUnit.UnitTests/Avalonia.Headless.XUnit.UnitTests.csproj
  99. 1 1
      tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
  100. 1 1
      tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs

+ 1 - 0
Avalonia.sln

@@ -120,6 +120,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1
 		build\TrimmingEnable.props = build\TrimmingEnable.props
 		build\UnitTests.NetFX.props = build\UnitTests.NetFX.props
 		build\XUnit.props = build\XUnit.props
+		build\TargetFrameworks.props = build\TargetFrameworks.props
 	EndProjectSection
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{4D6FAF79-58B4-482F-9122-0668C346364C}"

+ 1 - 1
Directory.Build.props

@@ -1,11 +1,11 @@
 <Project>
   <Import Project="$(MSBuildThisFileDirectory)/build/AvaloniaPublicKey.props"/>
+  <Import Project="$(MSBuildThisFileDirectory)/build/TargetFrameworks.props"/>
   <PropertyGroup>
       <PackageOutputPath Condition="'$(PackageOutputPath)' == ''">$(MSBuildThisFileDirectory)build-intermediate/nuget</PackageOutputPath>
       <AvaloniaPreviewerNetCoreToolPath>$(MSBuildThisFileDirectory)\src\tools\Avalonia.Designer.HostApp\bin\$(Configuration)\netstandard2.0\Avalonia.Designer.HostApp.dll</AvaloniaPreviewerNetCoreToolPath>
       <!-- https://github.com/dotnet/msbuild/issues/2661 -->
       <AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
-      <MSBuildEnableWorkloadResolver>false</MSBuildEnableWorkloadResolver>
       <RunApiCompat>False</RunApiCompat>
       <LangVersion>11</LangVersion>
   </PropertyGroup>

+ 94 - 0
api/Avalonia.Android.nupkg.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- https://learn.microsoft.com/en-us/dotnet/fundamentals/package-validation/diagnostic-ids -->
+<Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Animation</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Animator</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Attribute</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Boolean</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Color</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Dimension</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Drawable</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Id</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Integer</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Interpolator</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Layout</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.String</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Style</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource.Styleable</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0007</DiagnosticId>
+    <Target>T:Avalonia.Android.Internal.Resource</Target>
+    <Left>baseline/net6.0-android31.0/Avalonia.Android.dll</Left>
+    <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
+  </Suppression>
+</Suppressions>

+ 3 - 3
azure-pipelines-integrationtests.yml

@@ -11,7 +11,7 @@ jobs:
       version: 6.0.x
 
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
       packageType: sdk
       useGlobalJson: true
@@ -33,7 +33,7 @@ jobs:
       rm -rf $(osascript -e "POSIX path of (path to application id \"net.avaloniaui.avalonia.integrationtestapp\")")
       pkill IntegrationTestApp
       ./samples/IntegrationTestApp/bundle.sh
-      open -n ./samples/IntegrationTestApp/bin/Debug/net7.0/osx-$arch/publish/IntegrationTestApp.app
+      open -n ./samples/IntegrationTestApp/bin/Debug/net8.0/osx-$arch/publish/IntegrationTestApp.app
       pkill IntegrationTestApp
     displayName: 'Build IntegrationTestApp'
 
@@ -65,7 +65,7 @@ jobs:
       version: 6.0.x
 
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
       packageType: sdk
       useGlobalJson: true

+ 3 - 3
azure-pipelines.yml

@@ -36,7 +36,7 @@ jobs:
       version: 6.0.x
 
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
       packageType: sdk
       useGlobalJson: true
@@ -82,7 +82,7 @@ jobs:
       version: 6.0.x
 
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
       packageType: sdk
       useGlobalJson: true
@@ -162,7 +162,7 @@ jobs:
       version: 6.0.x
 
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
       packageType: sdk
       useGlobalJson: true

+ 15 - 0
build/TargetFrameworks.props

@@ -0,0 +1,15 @@
+<Project>
+  <PropertyGroup>
+    <AvsCurrentTargetFramework>net8.0</AvsCurrentTargetFramework>
+    <AvsCurrentWindowsTargetFramework>$(AvsCurrentTargetFramework)-windows</AvsCurrentWindowsTargetFramework>
+    <AvsCurrentAndroidTargetFramework>$(AvsCurrentTargetFramework)-android34</AvsCurrentAndroidTargetFramework>
+    <AvsCurrentIOSTargetFramework>$(AvsCurrentTargetFramework)-ios17.0</AvsCurrentIOSTargetFramework>
+    <AvsCurrentTvOSTargetFramework>$(AvsCurrentTargetFramework)-tvos17</AvsCurrentTvOSTargetFramework>
+    <AvsCurrentBrowserTargetFramework>$(AvsCurrentTargetFramework)-browser</AvsCurrentBrowserTargetFramework>
+    <AvsCurrentTizenTargetFramework>$(AvsCurrentTargetFramework)-tizen</AvsCurrentTizenTargetFramework>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(AvsSkipBuildingLegacyTargetFrameworks)' != 'True'">
+    <AvsLegacyTargetFrameworks>net6.0</AvsLegacyTargetFrameworks>
+    <AvsLegacyWindowsTargetFrameworks>net6.0-windows</AvsLegacyWindowsTargetFrameworks>
+  </PropertyGroup>
+</Project>

+ 7 - 7
global.json

@@ -1,9 +1,9 @@
 {
-    "sdk": {
-        "version": "7.0.404",
-        "rollForward": "latestFeature"
-    },
-    "msbuild-sdks": {
-        "Microsoft.Build.Traversal": "3.2.0"
-    }
+  "sdk": {
+    "version": "8.0.101",
+    "rollForward": "latestFeature"
+  },
+  "msbuild-sdks": {
+    "Microsoft.Build.Traversal": "3.2.0"
+  }
 }

+ 1 - 1
native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme

@@ -56,7 +56,7 @@
       </MacroExpansion>
       <CommandLineArguments>
          <CommandLineArgument
-            argument = "bin/Debug/net6.0/ControlCatalog.NetCore.dll"
+            argument = "bin/Debug/net8.0/ControlCatalog.NetCore.dll"
             isEnabled = "YES">
          </CommandLineArgument>
       </CommandLineArguments>

+ 10 - 3
nukebuild/ApiDiffHelper.cs

@@ -110,8 +110,8 @@ public static class ApiDiffHelper
     private static readonly (string oldTfm, string newTfm)[] s_tfmRedirects = new[]
     {
         // We use StartsWith below comparing these tfm, as we ignore platform versions (like, net6.0-ios16.1)
-        ("net6.0-android", "net7.0-android"),
-        ("net6.0-ios", "net7.0-ios"),
+        ("net6.0-android", "net8.0-android"),
+        ("net6.0-ios", "net8.0-ios"),
         // Designer was moved from netcoreapp to netstandard 
         ("netcoreapp2.0", "netstandard2.0")
     };
@@ -171,8 +171,15 @@ public static class ApiDiffHelper
 
                 if (targetDll?.entry is null)
                 {
+                    if (packageId == "Avalonia"
+                        && baselineDll.target is "net461" or "netcoreapp2.0")
+                    {
+                        // In 11.1 we have removed net461 and netcoreapp2.0 targets from Avalonia package.
+                        continue;
+                    }
+                    
                     var actualTargets = string.Join(", ",
-                        targetDlls.Select(d => $"{d.target} ({baselineDll.entry.Name})"));
+                        targetDlls.Select(d => $"{d.target} ({d.entry.Name})"));
                     throw new InvalidOperationException(
                         $"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}."
                         + $"\r\nActual targets: {actualTargets}.");

+ 14 - 4
nukebuild/Build.cs

@@ -176,19 +176,29 @@ partial class Build : NukeBuild
 
         foreach (var fw in targetFrameworks)
         {
-            if (fw.StartsWith("net4")
+            var tfm = fw;
+            if (tfm == "$(AvsCurrentTargetFramework)")
+            {
+                tfm = "net8.0";
+            }
+            if (tfm == "$(AvsLegacyTargetFrameworks)")
+            {
+                tfm = "net6.0";
+            }
+            
+            if (tfm.StartsWith("net4")
                 && (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                 && Environment.GetEnvironmentVariable("FORCE_LINUX_TESTS") != "1")
             {
-                Information($"Skipping {projectName} ({fw}) tests on *nix - https://github.com/mono/mono/issues/13969");
+                Information($"Skipping {projectName} ({tfm}) tests on *nix - https://github.com/mono/mono/issues/13969");
                 continue;
             }
 
-            Information($"Running for {projectName} ({fw}) ...");
+            Information($"Running for {projectName} ({tfm}) ...");
 
             DotNetTest(c => ApplySetting(c)
                 .SetProjectFile(project)
-                .SetFramework(fw)
+                .SetFramework(tfm)
                 .EnableNoBuild()
                 .EnableNoRestore()
                 .When(Parameters.PublishTestResults, _ => _

+ 3 - 1
nukebuild/_build.csproj

@@ -6,7 +6,9 @@
     <IsPackable>False</IsPackable>
     <NoWarn>$(NoWarn);CS0649;CS0169;SYSLIB0011</NoWarn>
     <NukeTelemetryVersion>1</NukeTelemetryVersion>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
+    <!-- See https://github.com/nuke-build/nuke/issues/818 -->
+    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
     <!-- Necessary for Microsoft.DotNet.GenAPI.Tool -->
     <RestoreAdditionalProjectSources>https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8-transport/nuget/v3/index.json</RestoreAdditionalProjectSources>
   </PropertyGroup>

+ 1 - 1
packages/Avalonia/Avalonia.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-      <TargetFrameworks>net6.0;netstandard2.0;net461</TargetFrameworks>
+      <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
       <PackageId>Avalonia</PackageId>
   </PropertyGroup>
 

+ 1 - 1
samples/AppWithoutLifetime/AppWithoutLifetime.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <Nullable>enable</Nullable>
     <ApplicationManifest>app.manifest</ApplicationManifest>
   </PropertyGroup>

+ 1 - 1
samples/BindingDemo/BindingDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />

+ 1 - 2
samples/ControlCatalog.Android/ControlCatalog.Android.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0-android</TargetFramework>
+    <TargetFramework>$(AvsCurrentAndroidTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <OutputType>Exe</OutputType>
     <Nullable>enable</Nullable>
@@ -8,7 +8,6 @@
     <ApplicationVersion>1</ApplicationVersion>
     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
     <AndroidPackageFormat>apk</AndroidPackageFormat>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
   </PropertyGroup>
   <ItemGroup>
     <AndroidResource Include="..\..\build\Assets\Icon.png">

+ 1 - 1
samples/ControlCatalog.Browser.Blazor/ControlCatalog.Browser.Blazor.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentBrowserTargetFramework)</TargetFramework>
     <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
     <Nullable>enable</Nullable>
     <EmccTotalMemory>16777216</EmccTotalMemory>

+ 1 - 2
samples/ControlCatalog.Browser/ControlCatalog.Browser.csproj

@@ -1,11 +1,10 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentBrowserTargetFramework)</TargetFramework>
     <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
     <WasmMainJSPath>AppBundle/main.js</WasmMainJSPath>
     <OutputType>Exe</OutputType>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
     <WasmRuntimeAssetsLocation>./</WasmRuntimeAssetsLocation>
   </PropertyGroup>
 

+ 9 - 6
samples/ControlCatalog.Browser/EmbedSample.Browser.cs

@@ -21,14 +21,17 @@ public class EmbedSampleWeb : INativeDemoControl
         }
         else
         {
-            var defaultHandle = (JSObjectControlHandle)createDefault();
+            var parentContainer = (JSObjectControlHandle)createDefault();
 
-            _ = JSHost.ImportAsync("embed.js", "./embed.js").ContinueWith(_ =>
-            {
-                EmbedInterop.AddAppButton(defaultHandle.Object);
-            }, TaskScheduler.FromCurrentSynchronizationContext());
+            AddButton(parentContainer.Object);
+
+            return parentContainer;
 
-            return defaultHandle;
+            static async void AddButton(JSObject parent)
+            {
+                await JSHost.ImportAsync("embed.js", "./embed.js");
+                EmbedInterop.AddAppButton(parent);
+            } 
         }
     }
 }

+ 1 - 15
samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj

@@ -2,16 +2,9 @@
 
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <RuntimeFrameworkVersion>6.0.8</RuntimeFrameworkVersion>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(RunNativeAotCompilation)' == 'true'">
-    <IlcTrimMetadata>true</IlcTrimMetadata>
-    <RestoreAdditionalProjectSources>https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json</RestoreAdditionalProjectSources>
-    <NativeAotCompilerVersion>7.0.0-*</NativeAotCompilerVersion>
   </PropertyGroup>
 
   <ItemGroup>
@@ -36,13 +29,6 @@
     <PackageReference Include="MonoMac.NetStandard" Version="0.0.4" />
   </ItemGroup>
 
-  <ItemGroup Condition="'$(RunNativeAotCompilation)' == 'true'">
-    <PackageReference Include="Microsoft.DotNet.ILCompiler" Version="$(NativeAotCompilerVersion)" />
-    <!-- Cross-compilation for Windows x64-arm64 and Linux x64-arm64 -->
-    <PackageReference Condition="'$(RuntimeIdentifier)'=='win-arm64'" Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="$(NativeAotCompilerVersion)" />
-    <PackageReference Condition="'$(RuntimeIdentifier)'=='linux-arm64'" Include="runtime.linux-x64.Microsoft.DotNet.ILCompiler" Version="$(NativeAotCompilerVersion)" />
-  </ItemGroup>
-
   <PropertyGroup>
     <!-- For Microsoft.CodeAnalysis -->
     <SatelliteResourceLanguages>en</SatelliteResourceLanguages>

+ 2 - 2
samples/ControlCatalog.Tizen/ControlCatalog.Tizen.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0-tizen</TargetFramework>
+    <TargetFramework>$(AvsCurrentTizenTargetFramework)</TargetFramework>
     <OutputType>Exe</OutputType>
   </PropertyGroup>
   
@@ -17,4 +17,4 @@
     <Folder Include="lib\" />
     <Folder Include="res\" />
   </ItemGroup>
-</Project>
+</Project>

+ 2 - 2
samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj

@@ -2,8 +2,8 @@
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <ProvisioningType>manual</ProvisioningType>
-    <TargetFramework>net7.0-ios</TargetFramework>
-<!--    <TargetFramework>net7.0-tvos</TargetFramework>-->
+    <TargetFramework>$(AvsCurrentIOSTargetFramework)</TargetFramework>
+<!--    <TargetFramework>$(AvsCurrentTvOSTargetFramework)</TargetFramework>-->
     <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
samples/ControlCatalog/ControlCatalog.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
+    <TargetFrameworks>netstandard2.0;$(AvsCurrentTargetFramework)</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <Nullable>enable</Nullable>
     <IncludeAvaloniaGenerators>true</IncludeAvaloniaGenerators>

+ 1 - 0
samples/Directory.Build.props

@@ -10,5 +10,6 @@
 
   <Import Project="..\build\SharedVersion.props"/>
   <Import Project="..\build\DevAnalyzers.props"/>
+  <Import Project="$(MSBuildThisFileDirectory)\..\Directory.Build.props" />
 
 </Project>

+ 1 - 1
samples/Generators.Sandbox/Generators.Sandbox.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <IncludeAvaloniaGenerators>true</IncludeAvaloniaGenerators>
   </PropertyGroup>
 

+ 1 - 1
samples/GpuInterop/GpuInterop.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
     <Nullable>enable</Nullable>
     <GenerateDocumentationFile>false</GenerateDocumentationFile>

+ 1 - 1
samples/IntegrationTestApp/IntegrationTestApp.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <Nullable>enable</Nullable>
     <NoWarn>$(NoWarn);AVP1012</NoWarn>
   </PropertyGroup>

+ 1 - 2
samples/MobileSandbox.Android/MobileSandbox.Android.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0-android</TargetFramework>
+    <TargetFramework>$(AvsCurrentAndroidTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <OutputType>Exe</OutputType>
     <Nullable>enable</Nullable>
@@ -8,7 +8,6 @@
     <ApplicationVersion>1</ApplicationVersion>
     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
     <AndroidPackageFormat>apk</AndroidPackageFormat>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
   </PropertyGroup>
   <ItemGroup>
     <AndroidResource Include="..\..\build\Assets\Icon.png">

+ 1 - 2
samples/MobileSandbox.Browser/MobileSandbox.Browser.csproj

@@ -1,11 +1,10 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentBrowserTargetFramework)</TargetFramework>
     <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
     <WasmMainJSPath>main.js</WasmMainJSPath>
     <OutputType>Exe</OutputType>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
     <WasmBuildNative>true</WasmBuildNative>
     <WasmRuntimeAssetsLocation>./</WasmRuntimeAssetsLocation>
   </PropertyGroup>

+ 1 - 1
samples/MobileSandbox.Desktop/MobileSandbox.Desktop.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
   </PropertyGroup>
 

+ 1 - 1
samples/MobileSandbox.iOS/MobileSandbox.iOS.csproj

@@ -2,7 +2,7 @@
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <ProvisioningType>manual</ProvisioningType>
-    <TargetFramework>net7.0-ios</TargetFramework>
+    <TargetFramework>$(AvsCurrentIOSTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
samples/MobileSandbox/MobileSandbox.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
+    <TargetFrameworks>netstandard2.0;$(AvsCurrentTargetFramework)</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <Nullable>enable</Nullable>    
   </PropertyGroup>

+ 1 - 1
samples/PlatformSanityChecks/PlatformSanityChecks.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 1
samples/Previewer/Previewer.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
     <Compile Update="**\*.xaml.cs">

+ 1 - 1
samples/ReactiveUIDemo/ReactiveUIDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <Nullable>enable</Nullable>
   </PropertyGroup>
 

+ 1 - 1
samples/RemoteDemo/RemoteDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\ControlCatalog\ControlCatalog.csproj" />

+ 1 - 1
samples/RenderDemo/RenderDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
     <Compile Include="..\..\src\Avalonia.Base\Rendering\SceneGraph\LineBoundsHelper.cs" Link="LineBoundsHelper.cs" />

+ 2 - 2
samples/SafeAreaDemo.Android/SafeAreaDemo.Android.csproj

@@ -1,14 +1,14 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net7.0-android</TargetFramework>
+    <TargetFramework>$(AvsCurrentAndroidTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <Nullable>enable</Nullable>
     <ApplicationId>com.avalonia.safeareademo</ApplicationId>
     <ApplicationVersion>1</ApplicationVersion>
     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
     <AndroidPackageFormat>apk</AndroidPackageFormat>
-    <AndroidEnableProfiledAot>False</AndroidEnableProfiledAot>
+    <AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 3
samples/SafeAreaDemo.Desktop/SafeAreaDemo.Desktop.csproj

@@ -1,9 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <!--If you are willing to use Windows/MacOS native APIs you will need to create 3 projects.
-    One for Windows with net7.0-windows TFM, one for MacOS with net7.0-macos and one with net7.0 TFM for Linux.-->
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <Nullable>enable</Nullable>
     <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
   </PropertyGroup>

+ 1 - 1
samples/SafeAreaDemo.iOS/SafeAreaDemo.iOS.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net7.0-ios</TargetFramework>
+    <TargetFramework>$(AvsCurrentIOSTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>10.0</SupportedOSPlatformVersion>
     <ProvisioningType>manual</ProvisioningType>
     <Nullable>enable</Nullable>

+ 1 - 1
samples/SafeAreaDemo/SafeAreaDemo.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <Nullable>enable</Nullable>
     <LangVersion>latest</LangVersion>
     <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>

+ 1 - 1
samples/Sandbox/Sandbox.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
     <IncludeAvaloniaGenerators>true</IncludeAvaloniaGenerators>
 <!--    <AvaloniaXamlIlDebuggerLaunch>true</AvaloniaXamlIlDebuggerLaunch>-->

+ 1 - 1
samples/VirtualizationDemo/VirtualizationDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <IncludeAvaloniaGenerators>true</IncludeAvaloniaGenerators>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
samples/interop/WindowsInteropTest/WindowsInteropTest.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFrameworks>net461;net6.0-windows</TargetFrameworks>
+    <TargetFrameworks>net461;$(AvsCurrentWindowsTargetFramework)</TargetFrameworks>
     <UseWPF>true</UseWPF>
     <UseWindowsForms>true</UseWindowsForms>
     <EnableWindowsTargeting>true</EnableWindowsTargeting>

+ 1 - 2
src/Android/Avalonia.Android/Avalonia.Android.csproj

@@ -1,9 +1,8 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0-android33</TargetFramework>
+    <TargetFramework>$(AvsCurrentAndroidTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
     <DebugType>portable</DebugType>
     <AndroidResgenNamespace>Avalonia.Android.Internal</AndroidResgenNamespace>
   </PropertyGroup>

+ 1 - 1
src/Avalonia.Base/Avalonia.Base.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <RootNamespace>Avalonia</RootNamespace>
     <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
     <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>

+ 1 - 1
src/Avalonia.Controls.ColorPicker/Avalonia.Controls.ColorPicker.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />

+ 1 - 1
src/Avalonia.Controls.ItemsRepeater/Avalonia.Controls.ItemsRepeater.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <RootNamespace>Avalonia</RootNamespace>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
src/Avalonia.Controls/Avalonia.Controls.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />

+ 1 - 1
src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <!-- WARNING! The designer support version number needs to be frozen 
          To allow projects that implement designer functionality to still
          work with newer versions of Avalonia. This version number only

+ 1 - 1
src/Avalonia.Desktop/Avalonia.Desktop.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 1
src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <RootNamespace>Avalonia</RootNamespace>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
src/Avalonia.Dialogs/Avalonia.Dialogs.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 1
src/Avalonia.Fonts.Inter/Avalonia.Fonts.Inter.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
     <AvaloniaResource Include="Assets\*" />

+ 1 - 1
src/Avalonia.FreeDesktop/Avalonia.FreeDesktop.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <Nullable>enable</Nullable>
   </PropertyGroup>
 

+ 1 - 1
src/Avalonia.Metal/Avalonia.Metal.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
 

+ 1 - 1
src/Avalonia.Native/Avalonia.Native.csproj

@@ -5,7 +5,7 @@
     <IsPackable>$(PackAvaloniaNative)</IsPackable>
     <IsPackable Condition="'$([MSBuild]::IsOSPlatform(OSX))' == 'True'">true</IsPackable>
     <IsPackable Condition="'$(ForcePackAvaloniaNative)' == 'True'">True</IsPackable>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
 

+ 1 - 1
src/Avalonia.OpenGL/Avalonia.OpenGL.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
 

+ 1 - 1
src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <SignAssembly>false</SignAssembly>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
src/Avalonia.Remote.Protocol/Avalonia.Remote.Protocol.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <DefineConstants>AVALONIA_REMOTE_PROTOCOL;$(DefineConstants)</DefineConstants>
     <SignAssembly>true</SignAssembly>
     <AssemblyOriginatorKeyFile>Key.snk</AssemblyOriginatorKeyFile>

+ 1 - 1
src/Avalonia.Themes.Fluent/Avalonia.Themes.Fluent.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />

+ 1 - 1
src/Avalonia.Themes.Simple/Avalonia.Themes.Simple.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />

+ 1 - 1
src/Avalonia.X11/Avalonia.X11.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
 

+ 2 - 1
src/Browser/Avalonia.Browser.Blazor/Avalonia.Browser.Blazor.csproj

@@ -1,7 +1,8 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentBrowserTargetFramework)</TargetFramework>
+    <ResolveStaticWebAssetsInputsDependsOn>_IncludeGeneratedAvaloniaStaticFiles;$(ResolveStaticWebAssetsInputsDependsOn)</ResolveStaticWebAssetsInputsDependsOn>
   </PropertyGroup>
 
   <ItemGroup>

+ 2 - 5
src/Browser/Avalonia.Browser/Avalonia.Browser.csproj

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentBrowserTargetFramework)</TargetFramework>
+    <Nullable>enable</Nullable>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
 
@@ -34,10 +35,6 @@
       <Pack>true</Pack>
       <PackagePath>build/;buildTransitive/</PackagePath>
     </Content>
-    <Content Include="build\interop.js">
-      <Pack>true</Pack>
-      <PackagePath>build/interop.js;buildTransitive/interop.js</PackagePath>
-    </Content>
     <Content Include="staticwebassets/**/*.*">
       <Pack>true</Pack>
       <PackagePath>staticwebassets/</PackagePath>

+ 0 - 6
src/Browser/Avalonia.Browser/Interop/CanvasHelper.cs

@@ -8,14 +8,8 @@ internal record GLInfo(int ContextId, uint FboId, int Stencils, int Samples, int
 
 internal static partial class CanvasHelper
 {
-
-    [DllImport("libSkiaSharp", CallingConvention = CallingConvention.Cdecl)]
-    static extern JSObject InterceptGLObject();
-
     public static GLInfo InitialiseGL(JSObject canvas, Action renderFrameCallback)
     {
-        InterceptGLObject();
-
         var info = InitGL(canvas, canvas.GetPropertyAsString("id")!, renderFrameCallback);
 
         var glInfo = new GLInfo(

+ 9 - 14
src/Browser/Avalonia.Browser/build/Avalonia.Browser.targets

@@ -1,10 +1,13 @@
 <Project>
   <PropertyGroup>
-    <EmccExtraLDFlags>$(EmccExtraLDFlags) --js-library="$(MSBuildThisFileDirectory)/interop.js"</EmccExtraLDFlags>
-    <EmccFlags>$(EmccFlags) -sERROR_ON_UNDEFINED_SYMBOLS=0</EmccFlags>
     <EmccFlags Condition="'$(AvaloniaAllowWebGl2)' == 'true'">$(EmccFlags) -sUSE_WEBGL2=1 -sMAX_WEBGL_VERSION=2 -lGL </EmccFlags>
   </PropertyGroup>
 
+  <ItemGroup>
+    <!-- So we can access Emscripten APIs -->
+    <EmccExportedRuntimeMethod Include="GL" />
+  </ItemGroup>
+  
   <!-- Fallback for applications without StaticWebAssetsEnabled (legacy WASM SDK) -->
   <ItemGroup Condition="'$(ShouldIncludeAvaloniaLegacyAssets)' == 'True'">
     <WasmExtraFilesToDeploy Condition="'$(WasmRuntimeAssetsLocation)' == ''" Include="$(MSBuildThisFileDirectory)/../staticwebassets/**/*.*" />
@@ -16,20 +19,12 @@
   </PropertyGroup>
 
   <ItemGroup Condition="'$(TargetFrameworkVersion)' != '' and '$(ShouldIncludeNativeSkiaSharp)' == 'True'">
-    <!-- net7.0 -->
-    <NativeFileReference Include="$(SkiaSharpStaticLibraryPath)/3.1.12/mt/*.a" Condition="!$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' == 'True'" />
-    <NativeFileReference Include="$(SkiaSharpStaticLibraryPath)/3.1.12/st/*.a" Condition="!$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' != 'True'" />
-    <!-- net8.0 -->
-    <NativeFileReference Include="$(SkiaSharpStaticLibraryPath)/3.1.34/mt/*.a" Condition="$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' == 'True'" />
-    <NativeFileReference Include="$(SkiaSharpStaticLibraryPath)/3.1.34/st/*.a" Condition="$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' != 'True'" />
+    <NativeFileReference Include="$(SkiaSharpStaticLibraryPath)/3.1.34/mt/*.a" Condition="'$(WasmEnableThreads)' == 'True'" />
+    <NativeFileReference Include="$(SkiaSharpStaticLibraryPath)/3.1.34/st/*.a" Condition="'$(WasmEnableThreads)' != 'True'" />
   </ItemGroup>
 
   <ItemGroup Condition="'$(TargetFrameworkVersion)' != '' and '$(ShouldIncludeNativeHarfBuzzSharp)' == 'True'">
-    <!-- net7.0 -->
-    <NativeFileReference Include="$(HarfBuzzSharpStaticLibraryPath)/3.1.12/st/*.a" Condition="!$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' != 'True'" />
-    <NativeFileReference Include="$(HarfBuzzSharpStaticLibraryPath)/3.1.12/mt/*.a" Condition="!$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' == 'True'" />
-    <!-- net8.0 -->
-    <NativeFileReference Include="$(HarfBuzzSharpStaticLibraryPath)/3.1.34/st/*.a" Condition="$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' != 'True'" />
-    <NativeFileReference Include="$(HarfBuzzSharpStaticLibraryPath)/3.1.34/mt/*.a" Condition="$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '8.0')) and '$(WasmEnableThreads)' == 'True'" />
+    <NativeFileReference Include="$(HarfBuzzSharpStaticLibraryPath)/3.1.34/st/*.a" Condition="'$(WasmEnableThreads)' != 'True'" />
+    <NativeFileReference Include="$(HarfBuzzSharpStaticLibraryPath)/3.1.34/mt/*.a" Condition="'$(WasmEnableThreads)' == 'True'" />
   </ItemGroup>
 </Project>

+ 0 - 13
src/Browser/Avalonia.Browser/build/interop.js

@@ -1,13 +0,0 @@
-var LibraryExample = {
-    // Internal functions
-    $EXAMPLE: {
-        internal_func: function () {
-        }
-    },
-    InterceptGLObject: function () {
-        globalThis.AvaloniaGL = GL
-    }
-}
-
-autoAddDeps(LibraryExample, '$EXAMPLE')
-mergeInto(LibraryManager.library, LibraryExample)

+ 8 - 2
src/Browser/Avalonia.Browser/webapp/modules/avalonia/canvas.ts

@@ -10,6 +10,12 @@ type CanvasElement = {
     Canvas: Canvas | undefined;
 } & HTMLCanvasElement;
 
+function getGL(): any {
+    const self = globalThis as any;
+    const module = self.Module ?? self.getDotnetRuntime(0)?.Module;
+    return module?.GL ?? self.AvaloniaGL ?? self.SkiaSharpGL;
+}
+
 export class Canvas {
     static elements: Map<string, HTMLCanvasElement>;
 
@@ -60,7 +66,7 @@ export class Canvas {
                 return;
             }
 
-            const GL = (globalThis as any).AvaloniaGL;
+            const GL = getGL();
 
             // make current
             GL.makeContextCurrent(ctx);
@@ -179,7 +185,7 @@ export class Canvas {
             renderViaOffscreenBackBuffer: 1
         };
 
-        const GL = (globalThis as any).AvaloniaGL;
+        const GL = getGL();
 
         let ctx: WebGLRenderingContext = GL.createContext(htmlCanvas, contextAttributes);
 

+ 1 - 1
src/Headless/Avalonia.Headless.NUnit/Avalonia.Headless.NUnit.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <IsTestProject>false</IsTestProject>
   </PropertyGroup>
 

+ 1 - 1
src/Headless/Avalonia.Headless.Vnc/Avalonia.Headless.Vnc.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
     <PropertyGroup>
-      <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+      <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
       <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     </PropertyGroup>
 

+ 1 - 1
src/Headless/Avalonia.Headless.XUnit/Avalonia.Headless.XUnit.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <IsTestProject>false</IsTestProject>
   </PropertyGroup>
 

+ 1 - 1
src/Headless/Avalonia.Headless/Avalonia.Headless.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 1
src/Linux/Avalonia.LinuxFramebuffer/Avalonia.LinuxFramebuffer.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml.Loader/Avalonia.Markup.Xaml.Loader.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <IsPackable>true</IsPackable>
     <IsAotCompatible>false</IsAotCompatible>
     <DefineConstants>$(DefineConstants);XAMLX_INTERNAL;XAML_RUNTIME_LOADER</DefineConstants>

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <DefineConstants>$(DefineConstants);PCL;NETSTANDARD;NETSTANDARD2_0;HAS_TYPE_CONVERTER;HAS_CUSTOM_ATTRIBUTE_PROVIDER;XAMLX_INTERNAL</DefineConstants>
     <UseCecil>false</UseCecil>
     <DefineConstants Condition="$(UseCecil) == true">$(DefineConstants);RUNTIME_XAML_CECIL</DefineConstants>

+ 1 - 1
src/Markup/Avalonia.Markup/Avalonia.Markup.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <RootNamespace>Avalonia</RootNamespace>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
src/Skia/Avalonia.Skia/Avalonia.Skia.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <IncludeLinuxSkia>true</IncludeLinuxSkia>
     <IncludeWasmSkia>true</IncludeWasmSkia>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>

+ 1 - 5
src/Tizen/Avalonia.Tizen/Avalonia.Tizen.csproj

@@ -1,16 +1,12 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net7.0-tizen</TargetFramework>
+    <TargetFramework>$(AvsCurrentTizenTargetFramework)</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="SkiaSharp.HarfBuzz" Version="2.88.7" />
-    <PackageReference Include="HarfBuzzSharp.NativeAssets.Tizen" Version="2.8.2.3" />
-    
     <ProjectReference Include="..\..\..\packages\Avalonia\Avalonia.csproj" />
     <ProjectReference Include="..\..\Skia\Avalonia.Skia\Avalonia.Skia.csproj" />
   </ItemGroup>

+ 1 - 1
src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>

+ 1 - 1
src/Windows/Avalonia.Win32.Interoperability/Avalonia.Win32.Interoperability.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net461;net6.0-windows</TargetFrameworks>
+    <TargetFrameworks>net461;$(AvsLegacyWindowsTargetFrameworks);$(AvsCurrentWindowsTargetFramework)</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <UseWindowsForms>true</UseWindowsForms>
     <EnableWindowsTargeting>true</EnableWindowsTargeting>

+ 1 - 1
src/Windows/Avalonia.Win32/Avalonia.Win32.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <!-- We still keep BinaryFormatter for WinForms compatibility. -->
     <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>

+ 1 - 1
src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs

@@ -2503,7 +2503,7 @@ namespace Avalonia.Win32.Interop
         [StructLayout(LayoutKind.Sequential)]
         internal struct APPBARDATA
         {
-            private static readonly int s_size = Marshal.SizeOf(typeof(APPBARDATA));
+            private static readonly int s_size = Marshal.SizeOf<APPBARDATA>();
 
             public int cbSize;
             public nint hWnd;

+ 1 - 2
src/iOS/Avalonia.iOS/Avalonia.iOS.csproj

@@ -1,11 +1,10 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net7.0-ios16.0;net7.0-tvos</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentIOSTargetFramework);$(AvsCurrentTvOSTargetFramework)</TargetFrameworks>
     <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">13.0</SupportedOSPlatformVersion>
     <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tvos'">13.0</SupportedOSPlatformVersion>
     <!-- Not yet enabled as a target framework -->
     <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
 
     <!-- Compatibility attributes are pretty much broken for iOS-like platforms. Verify by hand. -->

+ 1 - 1
src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFrameworks>net461;netstandard2.0;net6.0</TargetFrameworks>
+    <TargetFrameworks>net461;netstandard2.0;$(AvsCurrentTargetFramework)</TargetFrameworks>
     <DefineConstants>$(DefineConstants);XAMLX_INTERNAL</DefineConstants>
     <IsAotCompatible>false</IsAotCompatible>
   </PropertyGroup>

+ 1 - 1
tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Library</OutputType>
     <IsTestProject>true</IsTestProject>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>

+ 1 - 1
tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Exe</OutputType>
     <IsPackable>false</IsPackable>
   </PropertyGroup>

+ 1 - 1
tests/Avalonia.Controls.DataGrid.UnitTests/Avalonia.Controls.DataGrid.UnitTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Library</OutputType>
     <IsTestProject>true</IsTestProject>
   </PropertyGroup>

+ 1 - 1
tests/Avalonia.Controls.ItemsRepeater.UnitTests/Avalonia.Controls.ItemsRepeater.UnitTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Library</OutputType>
     <IsTestProject>true</IsTestProject>
   </PropertyGroup>

+ 1 - 1
tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Library</OutputType>
     <IsTestProject>true</IsTestProject>
   </PropertyGroup>

+ 1 - 1
tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Library</OutputType>
   </PropertyGroup>
   <Import Project="..\..\build\UnitTests.NetCore.targets" />

+ 8 - 5
tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs

@@ -29,25 +29,25 @@ namespace Avalonia.DesignerSupport.Tests
 
         [SkippableTheory,
          InlineData(
-            @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/net6.0/",
+            @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/net8.0/",
             "Avalonia.DesignerSupport.TestApp",
             "Avalonia.DesignerSupport.TestApp.dll",
             @"..\..\..\..\..\tests\Avalonia.DesignerSupport.TestApp\MainWindow.xaml",
             "win32"),
          InlineData(
-            @"..\..\..\..\..\samples\ControlCatalog.NetCore\bin\$BUILD\net6.0\",
+            @"..\..\..\..\..\samples\ControlCatalog.NetCore\bin\$BUILD\net8.0\",
             "ControlCatalog.NetCore",
             "ControlCatalog.dll",
             @"..\..\..\..\..\samples\ControlCatalog\MainWindow.xaml",
             "win32"),
         InlineData(
-            @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/net6.0/",
+            @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/net8.0/",
             "Avalonia.DesignerSupport.TestApp",
             "Avalonia.DesignerSupport.TestApp.dll",
             @"..\..\..\..\..\tests\Avalonia.DesignerSupport.TestApp\MainWindow.xaml",
             "avalonia-remote"),
         InlineData(
-            @"..\..\..\..\..\samples\ControlCatalog.NetCore\bin\$BUILD\net6.0\",
+            @"..\..\..\..\..\samples\ControlCatalog.NetCore\bin\$BUILD\net8.0\",
             "ControlCatalog.NetCore",
             "ControlCatalog.dll",
             @"..\..\..\..\..\samples\ControlCatalog\MainWindow.xaml",
@@ -74,6 +74,9 @@ namespace Avalonia.DesignerSupport.Tests
 #endif
             outputDir = outputDir.Replace("$BUILD", buildType);
 
+            var assemblyPath = Path.Combine(outputDir, assemblyName);
+            Assert.True(File.Exists(assemblyPath), "File.Exists(assemblyPath)");
+
             var sessionId = Guid.NewGuid();
             long handle = 0;
             bool success = false;
@@ -107,7 +110,7 @@ namespace Avalonia.DesignerSupport.Tests
 
                         await conn.Send(new UpdateXamlMessage
                         {
-                            AssemblyPath = Path.Combine(outputDir, assemblyName),
+                            AssemblyPath = assemblyPath,
                             Xaml = xaml
                         });
                     }

+ 1 - 1
tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
   <Import Project="..\..\build\UnitTests.NetCore.targets" />
   <Import Project="..\..\build\Moq.props" />

+ 1 - 1
tests/Avalonia.Generators.Tests/Avalonia.Generators.Tests.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <IsTestProject>true</IsTestProject>
   </PropertyGroup>
   <ItemGroup>

+ 1 - 1
tests/Avalonia.Headless.NUnit.UnitTests/Avalonia.Headless.NUnit.UnitTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <IsTestProject>true</IsTestProject>
     <DefineConstants>$(DefineConstants);NUNIT</DefineConstants>
   </PropertyGroup>

+ 1 - 1
tests/Avalonia.Headless.XUnit.UnitTests/Avalonia.Headless.XUnit.UnitTests.csproj

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <IsTestProject>true</IsTestProject>
     <DefineConstants>$(DefineConstants);XUNIT</DefineConstants>
   </PropertyGroup>

+ 1 - 1
tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <Nullable>enable</Nullable>
   </PropertyGroup>
 

+ 1 - 1
tests/Avalonia.IntegrationTests.Appium/DefaultAppFixture.cs

@@ -11,7 +11,7 @@ namespace Avalonia.IntegrationTests.Appium
 {
     public class DefaultAppFixture : IDisposable
     {
-        private const string TestAppPath = @"..\..\..\..\..\samples\IntegrationTestApp\bin\Debug\net7.0\IntegrationTestApp.exe";
+        private const string TestAppPath = @"..\..\..\..\..\samples\IntegrationTestApp\bin\Debug\net8.0\IntegrationTestApp.exe";
         private const string TestAppBundleId = "net.avaloniaui.avalonia.integrationtestapp";
 
         public DefaultAppFixture()

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików