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 @@
-
+