Skip to content

Commit 939cd4e

Browse files
Enhanced Cross-Platform Build System for ReactiveUI Contributors (#4128)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: glennawatson <5834289+glennawatson@users.noreply.github.com>
1 parent be45653 commit 939cd4e

File tree

20 files changed

+70
-29
lines changed

20 files changed

+70
-29
lines changed

src/Benchmarks/ReactiveUI.Benchmarks.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<IsPackable>false</IsPackable>
4-
<TargetFrameworks>net8.0</TargetFrameworks>
4+
<TargetFrameworks>$(ReactiveUIModernTargets)</TargetFrameworks>
55
<PlatformTarget>AnyCPU</PlatformTarget>
66
<OutputType>Exe</OutputType>
77
<NoWarn>;1591;1701;1702;1705;CA1822</NoWarn>

src/Directory.Build.props

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,54 @@
3232
<EmbedUntrackedSources>true</EmbedUntrackedSources>
3333
<IncludePackageReferencesDuringMarkupCompilation>true</IncludePackageReferencesDuringMarkupCompilation>
3434
<PublishRepositoryUrl>true</PublishRepositoryUrl>
35+
<!-- Legacy properties maintained for compatibility -->
3536
<WindowsTargetFrameworks>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</WindowsTargetFrameworks>
3637
<MobileTargetFrameworks>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</MobileTargetFrameworks>
3738
<BaseTargetFrameworks>netstandard2.0;net8.0;net9.0</BaseTargetFrameworks>
39+
40+
<!-- Granular Target Framework definitions for cross-platform builds -->
41+
<ReactiveUICoreTargets>netstandard2.0;net8.0;net9.0</ReactiveUICoreTargets>
42+
<ReactiveUIAndroidTargets>net9.0-android</ReactiveUIAndroidTargets>
43+
44+
<!-- Platform-specific targets - always defined but only used on supported platforms -->
45+
<ReactiveUIFrameworkTargets>net462;net472</ReactiveUIFrameworkTargets>
46+
<ReactiveUIWindowsTargets>net8.0-windows10.0.17763.0;net9.0-windows10.0.17763.0;net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0</ReactiveUIWindowsTargets>
47+
<ReactiveUIWinUITargets>net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0</ReactiveUIWinUITargets>
48+
<ReactiveUIAppleTargets>net9.0-ios;net9.0-tvos;net9.0-macos;net9.0-maccatalyst</ReactiveUIAppleTargets>
49+
50+
<!-- Windows-only targets (combines Framework + Windows targets) - conditioned -->
51+
<ReactiveUIWindowsOnlyTargets Condition="'$(IsWindows)' == 'true'">$(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets)</ReactiveUIWindowsOnlyTargets>
52+
<ReactiveUIWindowsOnlyTargets Condition="'$(IsWindows)' != 'true'">$(ReactiveUIWindowsTargets)</ReactiveUIWindowsOnlyTargets>
53+
54+
<!-- Cross-platform platform detection properties for project-level conditional building -->
55+
<IsWindows>$([MSBuild]::IsOsPlatform('Windows'))</IsWindows>
56+
<IsMacOS>$([MSBuild]::IsOsPlatform('OSX'))</IsMacOS>
57+
<IsLinux>$([MSBuild]::IsOsPlatform('Linux'))</IsLinux>
58+
59+
<!-- Modern targets for tests and benchmarks (no netstandard) -->
60+
<ReactiveUIModernTargets>net8.0;net9.0</ReactiveUIModernTargets>
61+
62+
<!-- Enable building Windows-specific targets on non-Windows platforms -->
63+
<EnableWindowsTargeting>true</EnableWindowsTargeting>
64+
</PropertyGroup>
65+
66+
<!-- Build final target framework list based on operating system -->
67+
<PropertyGroup>
68+
<!-- Start with core targets available on all platforms -->
69+
<ReactiveUIFinalTargetFrameworks>$(ReactiveUICoreTargets)</ReactiveUIFinalTargetFrameworks>
70+
71+
<!-- Add Android targets (available on all platforms with Android SDK) -->
72+
<ReactiveUIFinalTargetFrameworks>$(ReactiveUIFinalTargetFrameworks);$(ReactiveUIAndroidTargets)</ReactiveUIFinalTargetFrameworks>
73+
74+
<!-- Add Windows-specific targets (.NET Framework and Windows-specific TFMs) on Windows -->
75+
<ReactiveUIFinalTargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(ReactiveUIFinalTargetFrameworks);$(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets)</ReactiveUIFinalTargetFrameworks>
76+
77+
<!-- Add Apple targets on macOS and Windows -->
78+
<ReactiveUIFinalTargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows')) or $([MSBuild]::IsOsPlatform('OSX'))">$(ReactiveUIFinalTargetFrameworks);$(ReactiveUIAppleTargets)</ReactiveUIFinalTargetFrameworks>
79+
80+
<!-- Final target frameworks for tests/benchmarks (modern .NET only, with platform-specific additions) -->
81+
<ReactiveUIFinalModernTargetFrameworks>$(ReactiveUIModernTargets)</ReactiveUIFinalModernTargetFrameworks>
82+
<ReactiveUIFinalModernTargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(ReactiveUIFinalModernTargetFrameworks);net472;$(ReactiveUIWindowsTargets)</ReactiveUIFinalModernTargetFrameworks>
3883
<!-- Ensure all test runs use our runsettings to control cross-assembly parallelism -->
3984
<RunSettingsFilePath>$(MSBuildThisFileDirectory)tests.runsettings</RunSettingsFilePath>
4085
</PropertyGroup>

src/ReactiveUI.AndroidX/ReactiveUI.AndroidX.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>net8.0-android</TargetFrameworks>
3+
<TargetFrameworks>$(ReactiveUIAndroidTargets)</TargetFrameworks>
44
<PackageDescription>Provides ReactiveUI extensions for the AndroidX Library</PackageDescription>
55
<PackageId>ReactiveUI.AndroidX</PackageId>
66
<PackageTags>mvvm;reactiveui;rx;reactive extensions;observable;LINQ;events;frp;xamarin;androidx;forms;xamarin.androidx;net;</PackageTags>

src/ReactiveUI.Blazor/ReactiveUI.Blazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>$(BaseTargetFrameworks)</TargetFrameworks>
3+
<TargetFrameworks>$(ReactiveUICoreTargets)</TargetFrameworks>
44
<PackageDescription>Contains the ReactiveUI platform specific extensions for Blazor</PackageDescription>
55
<PackageTags>mvvm;reactiveui;rx;reactive extensions;observable;LINQ;eventsnet;netstandard;blazor;web;</PackageTags>
66
<NoWarn>$(NoWarn);BL0007;</NoWarn>

src/ReactiveUI.Blend/ReactiveUI.Blend.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk" Condition="'$(IsWindows)' == 'true'">
22
<PropertyGroup>
3-
<TargetFrameworks>$(WindowsTargetFrameworks)</TargetFrameworks>
3+
<TargetFrameworks>$(ReactiveUIWindowsOnlyTargets)</TargetFrameworks>
44
<AssemblyName>ReactiveUI.Blend</AssemblyName>
55
<RootNamespace>ReactiveUI.Blend</RootNamespace>
66
<PackageDescription>Provides reactive extensions based xaml components based on the Blend SDK library, allowing you to fire a observable from XAML</PackageDescription>

src/ReactiveUI.Builder.Maui.Tests/ReactiveUI.Builder.Maui.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>net8.0;net9.0;net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0</TargetFrameworks>
3+
<TargetFrameworks>$(ReactiveUIFinalModernTargetFrameworks)</TargetFrameworks>
44
<UseMaui>true</UseMaui>
55
<NoWarn>$(NoWarn);CS1591;SA1600</NoWarn>
66
<IsPackable>false</IsPackable>

src/ReactiveUI.Builder.Tests/ReactiveUI.Builder.Tests.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
5-
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">net8.0-windows10.0.17763.0;net9.0-windows10.0.17763.0</TargetFrameworks>
4+
<TargetFrameworks>$(ReactiveUIFinalModernTargetFrameworks)</TargetFrameworks>
65
<NoWarn>$(NoWarn);CS1591</NoWarn>
76
<ImplicitUsings>enable</ImplicitUsings>
87
<Nullable>enable</Nullable>

src/ReactiveUI.Builder.WpfApp/ReactiveUI.Builder.WpfApp.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk" Condition="'$(IsWindows)' == 'true'">
22

33
<PropertyGroup>
44
<OutputType>WinExe</OutputType>

src/ReactiveUI.Drawing/ReactiveUI.Drawing.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard2.0;$(MobileTargetFrameworks)</TargetFrameworks>
4-
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">$(TargetFrameworks);$(WindowsTargetFrameworks)</TargetFrameworks>
3+
<TargetFrameworks>$(ReactiveUIFinalTargetFrameworks)</TargetFrameworks>
54
<AssemblyName>ReactiveUI.Drawing</AssemblyName>
65
<RootNamespace>ReactiveUI.Drawing</RootNamespace>
76
<PackageDescription>A extension to the ReactiveUI platform that provides Splat bitmap operation support.</PackageDescription>

src/ReactiveUI.Drawing/Registrations.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void Register(Action<Func<object>, Type> registerFunction)
2727
throw new ArgumentNullException(nameof(registerFunction));
2828
}
2929

30-
#if !NETSTANDARD && !NETCOREAPP2_0
30+
#if NETFRAMEWORK || (NET5_0_OR_GREATER && WINDOWS)
3131
registerFunction(() => new PlatformBitmapLoader(), typeof(IBitmapLoader));
3232
#endif
3333
}

0 commit comments

Comments
 (0)