浏览代码

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 年之前
父节点
当前提交
326ef7c9fd
共有 100 个文件被更改,包括 274 次插入184 次删除
  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\TrimmingEnable.props = build\TrimmingEnable.props
 		build\UnitTests.NetFX.props = build\UnitTests.NetFX.props
 		build\UnitTests.NetFX.props = build\UnitTests.NetFX.props
 		build\XUnit.props = build\XUnit.props
 		build\XUnit.props = build\XUnit.props
+		build\TargetFrameworks.props = build\TargetFrameworks.props
 	EndProjectSection
 	EndProjectSection
 EndProject
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{4D6FAF79-58B4-482F-9122-0668C346364C}"
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{4D6FAF79-58B4-482F-9122-0668C346364C}"

+ 1 - 1
Directory.Build.props

@@ -1,11 +1,11 @@
 <Project>
 <Project>
   <Import Project="$(MSBuildThisFileDirectory)/build/AvaloniaPublicKey.props"/>
   <Import Project="$(MSBuildThisFileDirectory)/build/AvaloniaPublicKey.props"/>
+  <Import Project="$(MSBuildThisFileDirectory)/build/TargetFrameworks.props"/>
   <PropertyGroup>
   <PropertyGroup>
       <PackageOutputPath Condition="'$(PackageOutputPath)' == ''">$(MSBuildThisFileDirectory)build-intermediate/nuget</PackageOutputPath>
       <PackageOutputPath Condition="'$(PackageOutputPath)' == ''">$(MSBuildThisFileDirectory)build-intermediate/nuget</PackageOutputPath>
       <AvaloniaPreviewerNetCoreToolPath>$(MSBuildThisFileDirectory)\src\tools\Avalonia.Designer.HostApp\bin\$(Configuration)\netstandard2.0\Avalonia.Designer.HostApp.dll</AvaloniaPreviewerNetCoreToolPath>
       <AvaloniaPreviewerNetCoreToolPath>$(MSBuildThisFileDirectory)\src\tools\Avalonia.Designer.HostApp\bin\$(Configuration)\netstandard2.0\Avalonia.Designer.HostApp.dll</AvaloniaPreviewerNetCoreToolPath>
       <!-- https://github.com/dotnet/msbuild/issues/2661 -->
       <!-- https://github.com/dotnet/msbuild/issues/2661 -->
       <AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
       <AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
-      <MSBuildEnableWorkloadResolver>false</MSBuildEnableWorkloadResolver>
       <RunApiCompat>False</RunApiCompat>
       <RunApiCompat>False</RunApiCompat>
       <LangVersion>11</LangVersion>
       <LangVersion>11</LangVersion>
   </PropertyGroup>
   </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
       version: 6.0.x
 
 
   - task: UseDotNet@2
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
     inputs:
       packageType: sdk
       packageType: sdk
       useGlobalJson: true
       useGlobalJson: true
@@ -33,7 +33,7 @@ jobs:
       rm -rf $(osascript -e "POSIX path of (path to application id \"net.avaloniaui.avalonia.integrationtestapp\")")
       rm -rf $(osascript -e "POSIX path of (path to application id \"net.avaloniaui.avalonia.integrationtestapp\")")
       pkill IntegrationTestApp
       pkill IntegrationTestApp
       ./samples/IntegrationTestApp/bundle.sh
       ./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
       pkill IntegrationTestApp
     displayName: 'Build IntegrationTestApp'
     displayName: 'Build IntegrationTestApp'
 
 
@@ -65,7 +65,7 @@ jobs:
       version: 6.0.x
       version: 6.0.x
 
 
   - task: UseDotNet@2
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
     inputs:
       packageType: sdk
       packageType: sdk
       useGlobalJson: true
       useGlobalJson: true

+ 3 - 3
azure-pipelines.yml

@@ -36,7 +36,7 @@ jobs:
       version: 6.0.x
       version: 6.0.x
 
 
   - task: UseDotNet@2
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
     inputs:
       packageType: sdk
       packageType: sdk
       useGlobalJson: true
       useGlobalJson: true
@@ -82,7 +82,7 @@ jobs:
       version: 6.0.x
       version: 6.0.x
 
 
   - task: UseDotNet@2
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
     inputs:
       packageType: sdk
       packageType: sdk
       useGlobalJson: true
       useGlobalJson: true
@@ -162,7 +162,7 @@ jobs:
       version: 6.0.x
       version: 6.0.x
 
 
   - task: UseDotNet@2
   - task: UseDotNet@2
-    displayName: 'Use .NET 7.0 SDK'
+    displayName: 'Use .NET 8.0 SDK'
     inputs:
     inputs:
       packageType: sdk
       packageType: sdk
       useGlobalJson: true
       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>
       </MacroExpansion>
       <CommandLineArguments>
       <CommandLineArguments>
          <CommandLineArgument
          <CommandLineArgument
-            argument = "bin/Debug/net6.0/ControlCatalog.NetCore.dll"
+            argument = "bin/Debug/net8.0/ControlCatalog.NetCore.dll"
             isEnabled = "YES">
             isEnabled = "YES">
          </CommandLineArgument>
          </CommandLineArgument>
       </CommandLineArguments>
       </CommandLineArguments>

+ 10 - 3
nukebuild/ApiDiffHelper.cs

@@ -110,8 +110,8 @@ public static class ApiDiffHelper
     private static readonly (string oldTfm, string newTfm)[] s_tfmRedirects = new[]
     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)
         // 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 
         // Designer was moved from netcoreapp to netstandard 
         ("netcoreapp2.0", "netstandard2.0")
         ("netcoreapp2.0", "netstandard2.0")
     };
     };
@@ -171,8 +171,15 @@ public static class ApiDiffHelper
 
 
                 if (targetDll?.entry is null)
                 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(", ",
                     var actualTargets = string.Join(", ",
-                        targetDlls.Select(d => $"{d.target} ({baselineDll.entry.Name})"));
+                        targetDlls.Select(d => $"{d.target} ({d.entry.Name})"));
                     throw new InvalidOperationException(
                     throw new InvalidOperationException(
                         $"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}."
                         $"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}."
                         + $"\r\nActual targets: {actualTargets}.");
                         + $"\r\nActual targets: {actualTargets}.");

+ 14 - 4
nukebuild/Build.cs

@@ -176,19 +176,29 @@ partial class Build : NukeBuild
 
 
         foreach (var fw in targetFrameworks)
         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))
                 && (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                 && Environment.GetEnvironmentVariable("FORCE_LINUX_TESTS") != "1")
                 && 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;
                 continue;
             }
             }
 
 
-            Information($"Running for {projectName} ({fw}) ...");
+            Information($"Running for {projectName} ({tfm}) ...");
 
 
             DotNetTest(c => ApplySetting(c)
             DotNetTest(c => ApplySetting(c)
                 .SetProjectFile(project)
                 .SetProjectFile(project)
-                .SetFramework(fw)
+                .SetFramework(tfm)
                 .EnableNoBuild()
                 .EnableNoBuild()
                 .EnableNoRestore()
                 .EnableNoRestore()
                 .When(Parameters.PublishTestResults, _ => _
                 .When(Parameters.PublishTestResults, _ => _

+ 3 - 1
nukebuild/_build.csproj

@@ -6,7 +6,9 @@
     <IsPackable>False</IsPackable>
     <IsPackable>False</IsPackable>
     <NoWarn>$(NoWarn);CS0649;CS0169;SYSLIB0011</NoWarn>
     <NoWarn>$(NoWarn);CS0649;CS0169;SYSLIB0011</NoWarn>
     <NukeTelemetryVersion>1</NukeTelemetryVersion>
     <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 -->
     <!-- Necessary for Microsoft.DotNet.GenAPI.Tool -->
     <RestoreAdditionalProjectSources>https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8-transport/nuget/v3/index.json</RestoreAdditionalProjectSources>
     <RestoreAdditionalProjectSources>https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8-transport/nuget/v3/index.json</RestoreAdditionalProjectSources>
   </PropertyGroup>
   </PropertyGroup>

+ 1 - 1
packages/Avalonia/Avalonia.csproj

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

+ 1 - 1
samples/AppWithoutLifetime/AppWithoutLifetime.csproj

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

+ 1 - 1
samples/BindingDemo/BindingDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
     <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">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFramework>net7.0-android</TargetFramework>
+    <TargetFramework>$(AvsCurrentAndroidTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
     <Nullable>enable</Nullable>
     <Nullable>enable</Nullable>
@@ -8,7 +8,6 @@
     <ApplicationVersion>1</ApplicationVersion>
     <ApplicationVersion>1</ApplicationVersion>
     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
     <AndroidPackageFormat>apk</AndroidPackageFormat>
     <AndroidPackageFormat>apk</AndroidPackageFormat>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
     <AndroidResource Include="..\..\build\Assets\Icon.png">
     <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">
 <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentBrowserTargetFramework)</TargetFramework>
     <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
     <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
     <Nullable>enable</Nullable>
     <Nullable>enable</Nullable>
     <EmccTotalMemory>16777216</EmccTotalMemory>
     <EmccTotalMemory>16777216</EmccTotalMemory>

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

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

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

@@ -21,14 +21,17 @@ public class EmbedSampleWeb : INativeDemoControl
         }
         }
         else
         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>
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
     <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <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>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>
@@ -36,13 +29,6 @@
     <PackageReference Include="MonoMac.NetStandard" Version="0.0.4" />
     <PackageReference Include="MonoMac.NetStandard" Version="0.0.4" />
   </ItemGroup>
   </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>
   <PropertyGroup>
     <!-- For Microsoft.CodeAnalysis -->
     <!-- For Microsoft.CodeAnalysis -->
     <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
     <SatelliteResourceLanguages>en</SatelliteResourceLanguages>

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

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

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

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

+ 1 - 1
samples/ControlCatalog/ControlCatalog.csproj

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

+ 1 - 0
samples/Directory.Build.props

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

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

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

+ 1 - 1
samples/GpuInterop/GpuInterop.csproj

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

+ 1 - 1
samples/IntegrationTestApp/IntegrationTestApp.csproj

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

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

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

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

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

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

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

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

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

+ 1 - 1
samples/MobileSandbox/MobileSandbox.csproj

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

+ 1 - 1
samples/PlatformSanityChecks/PlatformSanityChecks.csproj

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

+ 1 - 1
samples/Previewer/Previewer.csproj

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

+ 1 - 1
samples/ReactiveUIDemo/ReactiveUIDemo.csproj

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

+ 1 - 1
samples/RemoteDemo/RemoteDemo.csproj

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

+ 1 - 1
samples/RenderDemo/RenderDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
     <Compile Include="..\..\src\Avalonia.Base\Rendering\SceneGraph\LineBoundsHelper.cs" Link="LineBoundsHelper.cs" />
     <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">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net7.0-android</TargetFramework>
+    <TargetFramework>$(AvsCurrentAndroidTargetFramework)</TargetFramework>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
     <Nullable>enable</Nullable>
     <Nullable>enable</Nullable>
     <ApplicationId>com.avalonia.safeareademo</ApplicationId>
     <ApplicationId>com.avalonia.safeareademo</ApplicationId>
     <ApplicationVersion>1</ApplicationVersion>
     <ApplicationVersion>1</ApplicationVersion>
     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
     <AndroidPackageFormat>apk</AndroidPackageFormat>
     <AndroidPackageFormat>apk</AndroidPackageFormat>
-    <AndroidEnableProfiledAot>False</AndroidEnableProfiledAot>
+    <AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>

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

@@ -1,9 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
     <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>
     <Nullable>enable</Nullable>
     <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
     <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
   </PropertyGroup>
   </PropertyGroup>

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

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

+ 1 - 1
samples/SafeAreaDemo/SafeAreaDemo.csproj

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

+ 1 - 1
samples/Sandbox/Sandbox.csproj

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

+ 1 - 1
samples/VirtualizationDemo/VirtualizationDemo.csproj

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentBrowserTargetFramework)</TargetFramework>
+    <Nullable>enable</Nullable>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   </PropertyGroup>
 
 
@@ -34,10 +35,6 @@
       <Pack>true</Pack>
       <Pack>true</Pack>
       <PackagePath>build/;buildTransitive/</PackagePath>
       <PackagePath>build/;buildTransitive/</PackagePath>
     </Content>
     </Content>
-    <Content Include="build\interop.js">
-      <Pack>true</Pack>
-      <PackagePath>build/interop.js;buildTransitive/interop.js</PackagePath>
-    </Content>
     <Content Include="staticwebassets/**/*.*">
     <Content Include="staticwebassets/**/*.*">
       <Pack>true</Pack>
       <Pack>true</Pack>
       <PackagePath>staticwebassets/</PackagePath>
       <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
 internal static partial class CanvasHelper
 {
 {
-
-    [DllImport("libSkiaSharp", CallingConvention = CallingConvention.Cdecl)]
-    static extern JSObject InterceptGLObject();
-
     public static GLInfo InitialiseGL(JSObject canvas, Action renderFrameCallback)
     public static GLInfo InitialiseGL(JSObject canvas, Action renderFrameCallback)
     {
     {
-        InterceptGLObject();
-
         var info = InitGL(canvas, canvas.GetPropertyAsString("id")!, renderFrameCallback);
         var info = InitGL(canvas, canvas.GetPropertyAsString("id")!, renderFrameCallback);
 
 
         var glInfo = new GLInfo(
         var glInfo = new GLInfo(

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

@@ -1,10 +1,13 @@
 <Project>
 <Project>
   <PropertyGroup>
   <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>
     <EmccFlags Condition="'$(AvaloniaAllowWebGl2)' == 'true'">$(EmccFlags) -sUSE_WEBGL2=1 -sMAX_WEBGL_VERSION=2 -lGL </EmccFlags>
   </PropertyGroup>
   </PropertyGroup>
 
 
+  <ItemGroup>
+    <!-- So we can access Emscripten APIs -->
+    <EmccExportedRuntimeMethod Include="GL" />
+  </ItemGroup>
+  
   <!-- Fallback for applications without StaticWebAssetsEnabled (legacy WASM SDK) -->
   <!-- Fallback for applications without StaticWebAssetsEnabled (legacy WASM SDK) -->
   <ItemGroup Condition="'$(ShouldIncludeAvaloniaLegacyAssets)' == 'True'">
   <ItemGroup Condition="'$(ShouldIncludeAvaloniaLegacyAssets)' == 'True'">
     <WasmExtraFilesToDeploy Condition="'$(WasmRuntimeAssetsLocation)' == ''" Include="$(MSBuildThisFileDirectory)/../staticwebassets/**/*.*" />
     <WasmExtraFilesToDeploy Condition="'$(WasmRuntimeAssetsLocation)' == ''" Include="$(MSBuildThisFileDirectory)/../staticwebassets/**/*.*" />
@@ -16,20 +19,12 @@
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup Condition="'$(TargetFrameworkVersion)' != '' and '$(ShouldIncludeNativeSkiaSharp)' == 'True'">
   <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>
 
 
   <ItemGroup Condition="'$(TargetFrameworkVersion)' != '' and '$(ShouldIncludeNativeHarfBuzzSharp)' == 'True'">
   <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>
   </ItemGroup>
 </Project>
 </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;
     Canvas: Canvas | undefined;
 } & HTMLCanvasElement;
 } & 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 {
 export class Canvas {
     static elements: Map<string, HTMLCanvasElement>;
     static elements: Map<string, HTMLCanvasElement>;
 
 
@@ -60,7 +66,7 @@ export class Canvas {
                 return;
                 return;
             }
             }
 
 
-            const GL = (globalThis as any).AvaloniaGL;
+            const GL = getGL();
 
 
             // make current
             // make current
             GL.makeContextCurrent(ctx);
             GL.makeContextCurrent(ctx);
@@ -179,7 +185,7 @@ export class Canvas {
             renderViaOffscreenBackBuffer: 1
             renderViaOffscreenBackBuffer: 1
         };
         };
 
 
-        const GL = (globalThis as any).AvaloniaGL;
+        const GL = getGL();
 
 
         let ctx: WebGLRenderingContext = GL.createContext(htmlCanvas, contextAttributes);
         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">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <IsTestProject>false</IsTestProject>
     <IsTestProject>false</IsTestProject>
   </PropertyGroup>
   </PropertyGroup>
 
 

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

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

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

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

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

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

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

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

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

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
 
 
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <IsPackable>true</IsPackable>
     <IsPackable>true</IsPackable>
     <IsAotCompatible>false</IsAotCompatible>
     <IsAotCompatible>false</IsAotCompatible>
     <DefineConstants>$(DefineConstants);XAMLX_INTERNAL;XAML_RUNTIME_LOADER</DefineConstants>
     <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">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <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>
     <DefineConstants>$(DefineConstants);PCL;NETSTANDARD;NETSTANDARD2_0;HAS_TYPE_CONVERTER;HAS_CUSTOM_ATTRIBUTE_PROVIDER;XAMLX_INTERNAL</DefineConstants>
     <UseCecil>false</UseCecil>
     <UseCecil>false</UseCecil>
     <DefineConstants Condition="$(UseCecil) == true">$(DefineConstants);RUNTIME_XAML_CECIL</DefineConstants>
     <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">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0</TargetFrameworks>
     <RootNamespace>Avalonia</RootNamespace>
     <RootNamespace>Avalonia</RootNamespace>
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>

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

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

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

@@ -1,16 +1,12 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
 
 
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFramework>net7.0-tizen</TargetFramework>
+    <TargetFramework>$(AvsCurrentTizenTargetFramework)</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <Nullable>enable</Nullable>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <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="..\..\..\packages\Avalonia\Avalonia.csproj" />
     <ProjectReference Include="..\..\Skia\Avalonia.Skia\Avalonia.Skia.csproj" />
     <ProjectReference Include="..\..\Skia\Avalonia.Skia\Avalonia.Skia.csproj" />
   </ItemGroup>
   </ItemGroup>

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

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

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

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

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

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

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

@@ -2503,7 +2503,7 @@ namespace Avalonia.Win32.Interop
         [StructLayout(LayoutKind.Sequential)]
         [StructLayout(LayoutKind.Sequential)]
         internal struct APPBARDATA
         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 int cbSize;
             public nint hWnd;
             public nint hWnd;

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

@@ -1,11 +1,10 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <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)')) == 'ios'">13.0</SupportedOSPlatformVersion>
     <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tvos'">13.0</SupportedOSPlatformVersion>
     <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tvos'">13.0</SupportedOSPlatformVersion>
     <!-- Not yet enabled as a target framework -->
     <!-- Not yet enabled as a target framework -->
     <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>
     <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>
-    <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
 
 
     <!-- Compatibility attributes are pretty much broken for iOS-like platforms. Verify by hand. -->
     <!-- 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">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
-    <TargetFrameworks>net461;netstandard2.0;net6.0</TargetFrameworks>
+    <TargetFrameworks>net461;netstandard2.0;$(AvsCurrentTargetFramework)</TargetFrameworks>
     <DefineConstants>$(DefineConstants);XAMLX_INTERNAL</DefineConstants>
     <DefineConstants>$(DefineConstants);XAMLX_INTERNAL</DefineConstants>
     <IsAotCompatible>false</IsAotCompatible>
     <IsAotCompatible>false</IsAotCompatible>
   </PropertyGroup>
   </PropertyGroup>

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

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

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

@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
     <IsPackable>false</IsPackable>
     <IsPackable>false</IsPackable>
   </PropertyGroup>
   </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">
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Library</OutputType>
     <OutputType>Library</OutputType>
     <IsTestProject>true</IsTestProject>
     <IsTestProject>true</IsTestProject>
   </PropertyGroup>
   </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">
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>$(AvsCurrentTargetFramework)</TargetFramework>
     <OutputType>Library</OutputType>
     <OutputType>Library</OutputType>
     <IsTestProject>true</IsTestProject>
     <IsTestProject>true</IsTestProject>
   </PropertyGroup>
   </PropertyGroup>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -11,7 +11,7 @@ namespace Avalonia.IntegrationTests.Appium
 {
 {
     public class DefaultAppFixture : IDisposable
     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";
         private const string TestAppBundleId = "net.avaloniaui.avalonia.integrationtestapp";
 
 
         public DefaultAppFixture()
         public DefaultAppFixture()

部分文件因为文件数量过多而无法显示