From 8d2237667058effb271a6c5a3b9ad13d116e5730 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:50:41 +0000 Subject: [PATCH 1/5] Initial plan From d44c5cf7e4a2b253ba1a0370d15d758feb6a92e9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:00:04 +0000 Subject: [PATCH 2/5] Implement cross-platform build experience with conditional TFMs Co-authored-by: glennawatson <5834289+glennawatson@users.noreply.github.com> --- src/Directory.Build.props | 31 +++++++++++++++++++ .../ReactiveUI.AndroidX.csproj | 2 +- .../ReactiveUI.Blazor.csproj | 2 +- src/ReactiveUI.Blend/ReactiveUI.Blend.csproj | 2 +- .../ReactiveUI.Builder.Tests.csproj | 3 +- .../ReactiveUI.Drawing.csproj | 3 +- src/ReactiveUI.Maui/ReactiveUI.Maui.csproj | 4 +-- .../ReactiveUI.Testing.csproj | 3 +- src/ReactiveUI.Tests/ReactiveUI.Tests.csproj | 3 +- src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj | 2 +- src/ReactiveUI/ReactiveUI.csproj | 3 +- 11 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 79415949e6..d1fe58e244 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -32,9 +32,40 @@ true true true + net462;net472;net8.0-windows10.0.17763.0;net9.0-windows10.0.17763.0;net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 net8.0-android;net8.0-ios;net8.0-tvos;net8.0-macos;net8.0-maccatalyst;net9.0-android;net9.0-ios;net9.0-tvos;net9.0-macos;net9.0-maccatalyst netstandard2.0;net8.0;net9.0 + + + netstandard2.0;net8.0;net9.0 + net462;net472 + net8.0-windows10.0.17763.0;net9.0-windows10.0.17763.0;net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 + net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 + net9.0-android + net9.0-ios;net9.0-tvos;net9.0-macos;net9.0-maccatalyst + + + net8.0;net9.0 + + + + + + $(ReactiveUICoreTargets) + + + $(ReactiveUIFinalTargetFrameworks);$(ReactiveUIAndroidTargets) + + + $(ReactiveUIFinalTargetFrameworks);$(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets) + + + $(ReactiveUIFinalTargetFrameworks);$(ReactiveUIAppleTargets) + + + $(ReactiveUIModernTargets) + $(ReactiveUIFinalModernTargetFrameworks);net472;$(ReactiveUIWindowsTargets) $(MSBuildThisFileDirectory)tests.runsettings diff --git a/src/ReactiveUI.AndroidX/ReactiveUI.AndroidX.csproj b/src/ReactiveUI.AndroidX/ReactiveUI.AndroidX.csproj index 4b4ab206b6..a7b7a097b7 100644 --- a/src/ReactiveUI.AndroidX/ReactiveUI.AndroidX.csproj +++ b/src/ReactiveUI.AndroidX/ReactiveUI.AndroidX.csproj @@ -1,6 +1,6 @@  - net8.0-android + $(ReactiveUIAndroidTargets) Provides ReactiveUI extensions for the AndroidX Library ReactiveUI.AndroidX mvvm;reactiveui;rx;reactive extensions;observable;LINQ;events;frp;xamarin;androidx;forms;xamarin.androidx;net; diff --git a/src/ReactiveUI.Blazor/ReactiveUI.Blazor.csproj b/src/ReactiveUI.Blazor/ReactiveUI.Blazor.csproj index caf115df05..d3b6be7a5a 100644 --- a/src/ReactiveUI.Blazor/ReactiveUI.Blazor.csproj +++ b/src/ReactiveUI.Blazor/ReactiveUI.Blazor.csproj @@ -1,6 +1,6 @@  - $(BaseTargetFrameworks) + $(ReactiveUICoreTargets) Contains the ReactiveUI platform specific extensions for Blazor mvvm;reactiveui;rx;reactive extensions;observable;LINQ;eventsnet;netstandard;blazor;web; $(NoWarn);BL0007; diff --git a/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj b/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj index e1f61abf68..2f6eb0e073 100644 --- a/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj +++ b/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj @@ -1,6 +1,6 @@  - $(WindowsTargetFrameworks) + $(ReactiveUIWindowsTargets);$(ReactiveUIFrameworkTargets) ReactiveUI.Blend ReactiveUI.Blend Provides reactive extensions based xaml components based on the Blend SDK library, allowing you to fire a observable from XAML diff --git a/src/ReactiveUI.Builder.Tests/ReactiveUI.Builder.Tests.csproj b/src/ReactiveUI.Builder.Tests/ReactiveUI.Builder.Tests.csproj index f17d6c2922..a2b61e5b16 100644 --- a/src/ReactiveUI.Builder.Tests/ReactiveUI.Builder.Tests.csproj +++ b/src/ReactiveUI.Builder.Tests/ReactiveUI.Builder.Tests.csproj @@ -1,8 +1,7 @@  - net8.0;net9.0 - ;net8.0-windows10.0.17763.0;net9.0-windows10.0.17763.0 + $(ReactiveUIFinalModernTargetFrameworks) $(NoWarn);CS1591 enable enable diff --git a/src/ReactiveUI.Drawing/ReactiveUI.Drawing.csproj b/src/ReactiveUI.Drawing/ReactiveUI.Drawing.csproj index 416fa50350..0f53b0190d 100644 --- a/src/ReactiveUI.Drawing/ReactiveUI.Drawing.csproj +++ b/src/ReactiveUI.Drawing/ReactiveUI.Drawing.csproj @@ -1,7 +1,6 @@  - netstandard2.0;$(MobileTargetFrameworks) - $(TargetFrameworks);$(WindowsTargetFrameworks) + $(ReactiveUIFinalTargetFrameworks) ReactiveUI.Drawing ReactiveUI.Drawing A extension to the ReactiveUI platform that provides Splat bitmap operation support. diff --git a/src/ReactiveUI.Maui/ReactiveUI.Maui.csproj b/src/ReactiveUI.Maui/ReactiveUI.Maui.csproj index 76bb6cc9fc..b9f8a0a9af 100644 --- a/src/ReactiveUI.Maui/ReactiveUI.Maui.csproj +++ b/src/ReactiveUI.Maui/ReactiveUI.Maui.csproj @@ -1,7 +1,7 @@  - net8.0;net9.0 - $(TargetFrameworks);net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 + $(ReactiveUIModernTargets) + $(TargetFrameworks);$(ReactiveUIWinUITargets) Contains the ReactiveUI platform specific extensions for Microsoft Maui mvvm;reactiveui;rx;reactive extensions;observable;LINQ;events;frp;maui;android;ios;mac;windows;net true diff --git a/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj b/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj index 44af03c19b..a5425a0495 100644 --- a/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj +++ b/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj @@ -1,7 +1,6 @@  - $(BaseTargetFrameworks) - $(TargetFrameworks);net472 + $(ReactiveUIFinalModernTargetFrameworks) ReactiveUI.Testing ReactiveUI.Testing Provides extensions for testing ReactiveUI based applications diff --git a/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj b/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj index ff9e081766..f796b04bb1 100644 --- a/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj +++ b/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj @@ -1,7 +1,6 @@  - net8.0;net9.0 - net472;net8.0-windows10.0.17763.0;net9.0-windows10.0.17763.0 + $(ReactiveUIFinalModernTargetFrameworks) $(NoWarn);CS1591 diff --git a/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj b/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj index f63c0c7da3..5c3367daad 100644 --- a/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj +++ b/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj @@ -1,6 +1,6 @@  - net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 + $(ReactiveUIWinUITargets) 10.0.19041.0 Contains the ReactiveUI platform specific extensions for WinUI Desktop ReactiveUI.WinUI.Desktop diff --git a/src/ReactiveUI/ReactiveUI.csproj b/src/ReactiveUI/ReactiveUI.csproj index 1f1aabdfa9..a771d806db 100644 --- a/src/ReactiveUI/ReactiveUI.csproj +++ b/src/ReactiveUI/ReactiveUI.csproj @@ -1,7 +1,6 @@  - $(BaseTargetFrameworks);$(MobileTargetFrameworks) - $(TargetFrameworks);$(WindowsTargetFrameworks) + $(ReactiveUIFinalTargetFrameworks) ReactiveUI ReactiveUI A MVVM framework that integrates with the Reactive Extensions for .NET to create elegant, testable User Interfaces that run on any mobile or desktop platform. This is the base package with the base platform implementations From 44781f7e5deb6290e728235f1121d37a6c0861f2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:02:42 +0000 Subject: [PATCH 3/5] Complete cross-platform build implementation and add Windows-only target grouping Co-authored-by: glennawatson <5834289+glennawatson@users.noreply.github.com> --- src/Directory.Build.props | 3 +++ src/ReactiveUI.Blend/ReactiveUI.Blend.csproj | 2 +- src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj | 2 +- src/ReactiveUI.Wpf/ReactiveUI.Wpf.csproj | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index d1fe58e244..19d99a6e95 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -45,6 +45,9 @@ net9.0-android net9.0-ios;net9.0-tvos;net9.0-macos;net9.0-maccatalyst + + $(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets) + net8.0;net9.0 diff --git a/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj b/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj index 2f6eb0e073..d8962a47a0 100644 --- a/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj +++ b/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj @@ -1,6 +1,6 @@  - $(ReactiveUIWindowsTargets);$(ReactiveUIFrameworkTargets) + $(ReactiveUIWindowsOnlyTargets) ReactiveUI.Blend ReactiveUI.Blend Provides reactive extensions based xaml components based on the Blend SDK library, allowing you to fire a observable from XAML diff --git a/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj b/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj index 7ade4470e4..83e9cc7f93 100644 --- a/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj +++ b/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj @@ -4,7 +4,7 @@ When 19041 is selected by the end user it causes the ControlScheduler in System.Reactive to be exposed and used. --> - $(WindowsTargetFrameworks) + $(ReactiveUIWindowsOnlyTargets) ReactiveUI.Winforms ReactiveUI.Winforms Contains the ReactiveUI platform specific extensions for Windows Forms diff --git a/src/ReactiveUI.Wpf/ReactiveUI.Wpf.csproj b/src/ReactiveUI.Wpf/ReactiveUI.Wpf.csproj index a155a4a2ff..542c0dc14f 100644 --- a/src/ReactiveUI.Wpf/ReactiveUI.Wpf.csproj +++ b/src/ReactiveUI.Wpf/ReactiveUI.Wpf.csproj @@ -4,7 +4,7 @@ Added 19041 target as a workaround for System.Reactive targeting net5.0-windows10.0.19041.0 When 19041 is selected by the end user it causes the DispatcherScheduler in System.Reactive to be exposed and used. --> - $(WindowsTargetFrameworks) + $(ReactiveUIWindowsOnlyTargets) Contains the ReactiveUI platform specific extensions for Windows Presentation Foundation (WPF) ReactiveUI.WPF true From 56065d31cfc3f85fa8cad63c60d4b8cfa3865a86 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:24:01 +0000 Subject: [PATCH 4/5] Complete cross-platform build system with all project standardization Co-authored-by: glennawatson <5834289+glennawatson@users.noreply.github.com> --- src/Benchmarks/ReactiveUI.Benchmarks.csproj | 2 +- src/Directory.Build.props | 3 +++ .../ReactiveUI.Builder.Maui.Tests.csproj | 2 +- src/ReactiveUI.LeakTests/ReactiveUI.LeakTests.csproj | 2 +- src/ReactiveUI.Splat.Tests/ReactiveUI.Splat.Tests.csproj | 2 +- src/ReactiveUI.Testing.Tests/ReactiveUI.Testing.Tests.csproj | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Benchmarks/ReactiveUI.Benchmarks.csproj b/src/Benchmarks/ReactiveUI.Benchmarks.csproj index 34ab2ff5fd..d35d3d4d7b 100644 --- a/src/Benchmarks/ReactiveUI.Benchmarks.csproj +++ b/src/Benchmarks/ReactiveUI.Benchmarks.csproj @@ -1,7 +1,7 @@ false - net8.0 + $(ReactiveUIModernTargets) AnyCPU Exe ;1591;1701;1702;1705;CA1822 diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 19d99a6e95..ec4ba8c1b7 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -50,6 +50,9 @@ net8.0;net9.0 + + + true diff --git a/src/ReactiveUI.Builder.Maui.Tests/ReactiveUI.Builder.Maui.Tests.csproj b/src/ReactiveUI.Builder.Maui.Tests/ReactiveUI.Builder.Maui.Tests.csproj index e823efff5c..461c46a988 100644 --- a/src/ReactiveUI.Builder.Maui.Tests/ReactiveUI.Builder.Maui.Tests.csproj +++ b/src/ReactiveUI.Builder.Maui.Tests/ReactiveUI.Builder.Maui.Tests.csproj @@ -1,6 +1,6 @@  - net8.0;net9.0;net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 + $(ReactiveUIFinalModernTargetFrameworks) true $(NoWarn);CS1591;SA1600 false diff --git a/src/ReactiveUI.LeakTests/ReactiveUI.LeakTests.csproj b/src/ReactiveUI.LeakTests/ReactiveUI.LeakTests.csproj index 672316b150..8ba16002b7 100644 --- a/src/ReactiveUI.LeakTests/ReactiveUI.LeakTests.csproj +++ b/src/ReactiveUI.LeakTests/ReactiveUI.LeakTests.csproj @@ -1,6 +1,6 @@  - net472;net9.0 + $(ReactiveUIFinalModernTargetFrameworks) false diff --git a/src/ReactiveUI.Splat.Tests/ReactiveUI.Splat.Tests.csproj b/src/ReactiveUI.Splat.Tests/ReactiveUI.Splat.Tests.csproj index 508873a39d..4dbc2d51b0 100644 --- a/src/ReactiveUI.Splat.Tests/ReactiveUI.Splat.Tests.csproj +++ b/src/ReactiveUI.Splat.Tests/ReactiveUI.Splat.Tests.csproj @@ -1,6 +1,6 @@  - net472;net9.0 + $(ReactiveUIFinalModernTargetFrameworks) false diff --git a/src/ReactiveUI.Testing.Tests/ReactiveUI.Testing.Tests.csproj b/src/ReactiveUI.Testing.Tests/ReactiveUI.Testing.Tests.csproj index 858641b0bf..a2f523e3c3 100644 --- a/src/ReactiveUI.Testing.Tests/ReactiveUI.Testing.Tests.csproj +++ b/src/ReactiveUI.Testing.Tests/ReactiveUI.Testing.Tests.csproj @@ -1,6 +1,6 @@  - net472;net9.0 + $(ReactiveUIFinalModernTargetFrameworks) netstandard2.0 $(TargetFramework) From c20b3cffc0f1aeed692110e9047b11d5ce188137 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:44:27 +0000 Subject: [PATCH 5/5] Fix cross-platform build system and exclude Windows-specific projects on Linux Co-authored-by: glennawatson <5834289+glennawatson@users.noreply.github.com> --- src/Directory.Build.props | 14 +++++++++++--- src/ReactiveUI.Blend/ReactiveUI.Blend.csproj | 2 +- .../ReactiveUI.Builder.WpfApp.csproj | 2 +- src/ReactiveUI.Drawing/Registrations.cs | 2 +- src/ReactiveUI.Tests/ReactiveUI.Tests.csproj | 3 ++- src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj | 2 +- src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj | 2 +- src/ReactiveUI.Wpf/ReactiveUI.Wpf.csproj | 2 +- 8 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index ec4ba8c1b7..326e9a08dc 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -39,14 +39,22 @@ netstandard2.0;net8.0;net9.0 + net9.0-android + + net462;net472 net8.0-windows10.0.17763.0;net9.0-windows10.0.17763.0;net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0 - net9.0-android net9.0-ios;net9.0-tvos;net9.0-macos;net9.0-maccatalyst - - $(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets) + + $(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets) + $(ReactiveUIWindowsTargets) + + + $([MSBuild]::IsOsPlatform('Windows')) + $([MSBuild]::IsOsPlatform('OSX')) + $([MSBuild]::IsOsPlatform('Linux')) net8.0;net9.0 diff --git a/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj b/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj index d8962a47a0..aab9c08aad 100644 --- a/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj +++ b/src/ReactiveUI.Blend/ReactiveUI.Blend.csproj @@ -1,4 +1,4 @@ - + $(ReactiveUIWindowsOnlyTargets) ReactiveUI.Blend diff --git a/src/ReactiveUI.Builder.WpfApp/ReactiveUI.Builder.WpfApp.csproj b/src/ReactiveUI.Builder.WpfApp/ReactiveUI.Builder.WpfApp.csproj index c755cf7194..102ed1078c 100644 --- a/src/ReactiveUI.Builder.WpfApp/ReactiveUI.Builder.WpfApp.csproj +++ b/src/ReactiveUI.Builder.WpfApp/ReactiveUI.Builder.WpfApp.csproj @@ -1,4 +1,4 @@ - + WinExe diff --git a/src/ReactiveUI.Drawing/Registrations.cs b/src/ReactiveUI.Drawing/Registrations.cs index 15048f0112..3ec9a8e87a 100644 --- a/src/ReactiveUI.Drawing/Registrations.cs +++ b/src/ReactiveUI.Drawing/Registrations.cs @@ -27,7 +27,7 @@ public void Register(Action, Type> registerFunction) throw new ArgumentNullException(nameof(registerFunction)); } -#if !NETSTANDARD && !NETCOREAPP2_0 +#if NETFRAMEWORK || (NET5_0_OR_GREATER && WINDOWS) registerFunction(() => new PlatformBitmapLoader(), typeof(IBitmapLoader)); #endif } diff --git a/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj b/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj index f796b04bb1..342732317b 100644 --- a/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj +++ b/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj @@ -1,6 +1,7 @@  - $(ReactiveUIFinalModernTargetFrameworks) + $(ReactiveUIFinalModernTargetFrameworks) + $(NoWarn);CS1591 diff --git a/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj b/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj index 5c3367daad..a6a7653043 100644 --- a/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj +++ b/src/ReactiveUI.WinUI/ReactiveUI.WinUI.csproj @@ -1,4 +1,4 @@ - + $(ReactiveUIWinUITargets) 10.0.19041.0 diff --git a/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj b/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj index 83e9cc7f93..b32e5bb132 100644 --- a/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj +++ b/src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj @@ -1,4 +1,4 @@ - +