Skip to content

Commit a83c0e0

Browse files
authored
fix: cross platform build and tests (#4132)
Fixes the cross platform builds and tests
1 parent 54ee58b commit a83c0e0

File tree

171 files changed

+3477
-846
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

171 files changed

+3477
-846
lines changed

src/Directory.Build.props

Lines changed: 61 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
<RepositoryType>git</RepositoryType>
2020
<NoWarn>$(NoWarn);IDE0060;IDE1006;IDE0130;VSSpell001;CA1510</NoWarn>
2121
<!-- Publish the repository URL in the built .nupkg (in the NuSpec <Repository> element) -->
22+
2223
<PublishRepositoryUrl>true</PublishRepositoryUrl>
2324
<!-- Embed source files that are not tracked by the source control manager in the PDB -->
2425
<EmbedUntrackedSources>true</EmbedUntrackedSources>
26+
2527
<!-- Include PDB in the built .nupkg -->
2628
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
2729
<Nullable>enable</Nullable>
@@ -32,90 +34,97 @@
3234
<EmbedUntrackedSources>true</EmbedUntrackedSources>
3335
<IncludePackageReferencesDuringMarkupCompilation>true</IncludePackageReferencesDuringMarkupCompilation>
3436
<PublishRepositoryUrl>true</PublishRepositoryUrl>
35-
<!-- Legacy properties maintained for compatibility -->
36-
<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>
37-
<MobileTargetFrameworks>net9.0-android;net9.0-ios;net9.0-tvos;net9.0-macos;net9.0-maccatalyst</MobileTargetFrameworks>
38-
<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-
37+
6238
<!-- Enable building Windows-specific targets on non-Windows platforms -->
6339
<EnableWindowsTargeting>true</EnableWindowsTargeting>
6440
</PropertyGroup>
6541

66-
<!-- Build final target framework list based on operating system -->
6742
<PropertyGroup>
43+
<!-- Granular Target Framework definitions for cross-platform builds -->
44+
<ReactiveUICoreTargets>net8.0;net9.0;net10.0</ReactiveUICoreTargets>
45+
46+
<!-- Platform-specific targets - always defined but only used on supported platforms -->
47+
<ReactiveUIFrameworkTargets Condition="$([MSBuild]::IsOsPlatform('Windows'))">net462;net472</ReactiveUIFrameworkTargets>
48+
<ReactiveUIMauiWindowsTargets>net9.0-windows10.0.19041.0;net10.0-windows10.0.19041.0</ReactiveUIMauiWindowsTargets>
49+
<ReactiveUIWindowsTargets>net9.0-windows10.0.19041.0;net10.0-windows10.0.19041.0</ReactiveUIWindowsTargets>
50+
<ReactiveUIWinUITargets>net9.0-windows10.0.19041.0;net10.0-windows10.0.19041.0</ReactiveUIWinUITargets>
51+
<ReactiveUIAppleTargets>net9.0-ios;net9.0-tvos;net9.0-macos;net9.0-maccatalyst;net10.0-ios;net10.0-tvos;net10.0-macos;net10.0-maccatalyst</ReactiveUIAppleTargets>
52+
<ReactiveUIAndroidTargets>net9.0-android;net10.0-android</ReactiveUIAndroidTargets>
53+
54+
<!-- Windows-only targets (combines Framework + Windows targets) - conditioned -->
55+
<ReactiveUIWindowsOnlyTargets>$(ReactiveUIWindowsTargets)</ReactiveUIWindowsOnlyTargets>
56+
<ReactiveUIWindowsOnlyTargets Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets)</ReactiveUIWindowsOnlyTargets>
57+
58+
<ReactiveUITestTargets>net9.0;net10.0</ReactiveUITestTargets>
59+
<ReactiveUITestTargets Condition="$([MSBuild]::IsOsPlatform('Windows'))">net9.0-windows10.0.19041.0;net10.0-windows10.0.19041.0</ReactiveUITestTargets>
60+
61+
<ReactiveUIMauiTestTargets>net9.0;net10.0</ReactiveUIMauiTestTargets>
62+
<ReactiveUIMauiTestTargets Condition="$([MSBuild]::IsOsPlatform('Windows'))">net9.0-windows10.0.19041.0;net10.0-windows10.0.19041.0</ReactiveUIMauiTestTargets>
63+
64+
<ReactiveMauiTargets>net9.0;net10.0;$(ReactiveUIAndroidTargets)</ReactiveMauiTargets>
65+
<ReactiveMauiTargets Condition="$([MSBuild]::IsOsPlatform('Windows')) or $([MSBuild]::IsOsPlatform('OSX'))">$(ReactiveMauiTargets);$(ReactiveUIAppleTargets)</ReactiveMauiTargets>
66+
67+
<!-- Modern targets for tests and benchmarks (no netstandard) -->
68+
<ReactiveUIModernTargets>net8.0;net9.0;net10.0</ReactiveUIModernTargets>
69+
6870
<!-- Start with core targets available on all platforms -->
69-
<ReactiveUIFinalTargetFrameworks>$(ReactiveUICoreTargets)</ReactiveUIFinalTargetFrameworks>
70-
71+
<ReactiveUIFinalTargetFrameworks>netstandard2.0;$(ReactiveUICoreTargets)</ReactiveUIFinalTargetFrameworks>
72+
7173
<!-- Add Android targets (available on all platforms with Android SDK) -->
7274
<ReactiveUIFinalTargetFrameworks>$(ReactiveUIFinalTargetFrameworks);$(ReactiveUIAndroidTargets)</ReactiveUIFinalTargetFrameworks>
73-
75+
7476
<!-- Add Windows-specific targets (.NET Framework and Windows-specific TFMs) on Windows -->
7577
<ReactiveUIFinalTargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(ReactiveUIFinalTargetFrameworks);$(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets)</ReactiveUIFinalTargetFrameworks>
76-
78+
7779
<!-- Add Apple targets on macOS and Windows -->
7880
<ReactiveUIFinalTargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows')) or $([MSBuild]::IsOsPlatform('OSX'))">$(ReactiveUIFinalTargetFrameworks);$(ReactiveUIAppleTargets)</ReactiveUIFinalTargetFrameworks>
79-
81+
8082
<!-- Final target frameworks for tests/benchmarks (modern .NET only, with platform-specific additions) -->
8183
<ReactiveUIFinalModernTargetFrameworks>$(ReactiveUIModernTargets)</ReactiveUIFinalModernTargetFrameworks>
82-
<ReactiveUIFinalModernTargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(ReactiveUIFinalModernTargetFrameworks);net472;$(ReactiveUIWindowsTargets)</ReactiveUIFinalModernTargetFrameworks>
84+
<ReactiveUIFinalModernTargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(ReactiveUIFrameworkTargets);$(ReactiveUIWindowsTargets)</ReactiveUIFinalModernTargetFrameworks>
85+
</PropertyGroup>
86+
87+
<PropertyGroup>
8388
<!-- Ensure all test runs use our runsettings to control cross-assembly parallelism -->
8489
<RunSettingsFilePath>$(MSBuildThisFileDirectory)tests.runsettings</RunSettingsFilePath>
85-
</PropertyGroup>
86-
<PropertyGroup Condition="'$(IsTestProject)' != 'true' and ($(TargetFramework.StartsWith('net8.0')) or $(TargetFramework.StartsWith('net9.0')))">
90+
</PropertyGroup>
91+
92+
<PropertyGroup Condition="$(MSBuildProjectName.Contains('WPF')) != 'true' and '$(IsTestProject)' != 'true' and ($(TargetFramework.StartsWith('net8.0')) or $(TargetFramework.StartsWith('net9.0')) or $(TargetFramework.StartsWith('net10.0')))">
8793
<IsAotCompatible>true</IsAotCompatible>
8894
</PropertyGroup>
95+
8996
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
9097
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
9198
</PropertyGroup>
99+
92100
<ItemGroup Condition="$(IsTestProject)">
93-
<PackageReference Include="NUnit" />
94-
<PackageReference Include="NUnit3TestAdapter" />
95-
<PackageReference Include="NUnit.Analyzers" />
96-
<PackageReference Include="Microsoft.NET.Test.Sdk" />
97-
<PackageReference Include="Microsoft.Reactive.Testing" />
98-
<PackageReference Include="PublicApiGenerator" />
99-
<PackageReference Include="coverlet.msbuild" PrivateAssets="All" />
100-
<PackageReference Include="Verify.NUnit" />
101+
<PackageReference Include="NUnit"/>
102+
<PackageReference Include="NUnit3TestAdapter"/>
103+
<PackageReference Include="NUnit.Analyzers"/>
104+
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
105+
<PackageReference Include="Microsoft.Reactive.Testing"/>
106+
<PackageReference Include="PublicApiGenerator"/>
107+
<PackageReference Include="coverlet.msbuild" PrivateAssets="All"/>
108+
<PackageReference Include="Verify.NUnit"/>
101109
</ItemGroup>
110+
102111
<ItemGroup Condition="'$(IsTestProject)' != 'true'">
103-
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
112+
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All"/>
104113
</ItemGroup>
105114
<PropertyGroup>
106115
<SolutionDir Condition="'$(SolutionDir)' == ''">$(MSBuildThisFileDirectory)</SolutionDir>
107116
</PropertyGroup>
108117
<ItemGroup>
109-
<None Include="$(MSBuildThisFileDirectory)..\images\logo.png" Pack="true" PackagePath="\" />
110-
<None Include="$(MSBuildThisFileDirectory)..\LICENSE" Pack="true" PackagePath="LICENSE" />
111-
<None Include="$(MSBuildThisFileDirectory)..\README.md" Pack="true" PackagePath="\" />
118+
<None Include="$(MSBuildThisFileDirectory)..\images\logo.png" Pack="true" PackagePath="\"/>
119+
<None Include="$(MSBuildThisFileDirectory)..\LICENSE" Pack="true" PackagePath="LICENSE"/>
120+
<None Include="$(MSBuildThisFileDirectory)..\README.md" Pack="true" PackagePath="\"/>
112121
</ItemGroup>
113122
<ItemGroup>
114-
<PackageReference Include="Nerdbank.GitVersioning" PrivateAssets="all" />
115-
<PackageReference Include="stylecop.analyzers" PrivateAssets="all" />
116-
<PackageReference Include="Roslynator.Analyzers" PrivateAssets="All" />
123+
<PackageReference Include="Nerdbank.GitVersioning" PrivateAssets="all"/>
124+
<PackageReference Include="stylecop.analyzers" PrivateAssets="all"/>
125+
<PackageReference Include="Roslynator.Analyzers" PrivateAssets="All"/>
117126
</ItemGroup>
118127
<ItemGroup>
119-
<AdditionalFiles Include="$(MSBuildThisFileDirectory)stylecop.json" Link="stylecop.json" />
128+
<AdditionalFiles Include="$(MSBuildThisFileDirectory)stylecop.json" Link="stylecop.json"/>
120129
</ItemGroup>
121130
</Project>

src/Directory.Packages.props

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
55
</PropertyGroup>
66
<PropertyGroup>
7-
<SplatVersion>16.1.1</SplatVersion>
8-
<XamarinAndroidXCoreVersion>1.13.1.4</XamarinAndroidXCoreVersion>
9-
<XamarinAndroidXLifecycleLiveDataVersion>2.8.4.1</XamarinAndroidXLifecycleLiveDataVersion>
7+
<SplatVersion>17.0.1</SplatVersion>
8+
<XamarinAndroidXCoreVersion>1.17.0</XamarinAndroidXCoreVersion>
9+
<XamarinAndroidXLifecycleLiveDataVersion>2.9.2.1</XamarinAndroidXLifecycleLiveDataVersion>
10+
<MauiVersion Condition="$(TargetFramework.StartsWith('net10'))">10.0.0-rc.1.25452.6</MauiVersion>
11+
<MauiVersion Condition="$(TargetFramework.StartsWith('net9'))">9.0.110</MauiVersion>
12+
<AspNetVersion Condition="$(TargetFramework.StartsWith('net10'))">10.0.0-rc.1.25451.107</AspNetVersion>
13+
<AspNetVersion Condition="$(TargetFramework.StartsWith('net9'))">9.0.9</AspNetVersion>
14+
<AspNetVersion Condition="$(TargetFramework.StartsWith('net8'))">8.0.20</AspNetVersion>
15+
<AspNetVersion Condition="$(TargetFramework.StartsWith('netstandard'))">3.1.32</AspNetVersion>
1016
</PropertyGroup>
1117
<ItemGroup>
1218
<PackageVersion Include="coverlet.msbuild" Version="6.0.4" />
@@ -39,12 +45,30 @@
3945
<PackageVersion Include="System.Runtime.Serialization.Primitives" Version="4.3.0" />
4046
<PackageVersion Include="System.Text.Json" Version="9.0.8" />
4147
<PackageVersion Include="Verify.NUnit" Version="30.10.0" />
42-
<PackageVersion Include="Xamarin.AndroidX.Core" Version="$(XamarinAndroidXCoreVersion)" />
43-
<PackageVersion Include="Xamarin.AndroidX.Preference" Version="1.2.1.9" />
44-
<PackageVersion Include="Xamarin.AndroidX.Legacy.Support.Core.UI" Version="1.0.0.29" />
45-
<PackageVersion Include="Xamarin.Google.Android.Material" Version="1.11.0.2" />
48+
<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="2.3.0-prerelease.250720.1" />
49+
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="$(AspNetVersion)" />
50+
<PackageVersion Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
51+
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
52+
53+
<!-- Lifecycle (align everything to 2.9.x) -->
54+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Runtime" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
55+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Process" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
56+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Runtime.Ktx" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
57+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModel" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
58+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModel.Ktx" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
59+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Runtime.Ktx.Android" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
60+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModelSavedState" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
4661
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
47-
<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="2.2.0" />
62+
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData.Core.Ktx" Version="$(XamarinAndroidXLifecycleLiveDataVersion)" />
63+
64+
<!-- Fragment/Collection/SavedState to match their latest constraints -->
65+
<PackageVersion Include="Xamarin.AndroidX.Fragment" Version="1.8.8.1" />
66+
<PackageVersion Include="Xamarin.AndroidX.Fragment.Ktx" Version="1.8.8.1" />
67+
<PackageVersion Include="Xamarin.AndroidX.Collection.Jvm" Version="1.5.0.3" />
68+
<PackageVersion Include="Xamarin.AndroidX.Collection.Ktx" Version="1.5.0.3" />
69+
<PackageVersion Include="Xamarin.AndroidX.SavedState" Version="1.3.1.1" />
70+
<PackageVersion Include="Xamarin.AndroidX.SavedState.SavedState.Ktx" Version="1.3.1.1" />
71+
<PackageVersion Include="Xamarin.AndroidX.Preference" Version="1.2.1.15" />
4872
</ItemGroup>
4973
<ItemGroup Condition="'$(UseMaui)' != 'true'">
5074
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.7.250606001" />
@@ -55,18 +79,7 @@
5579
<ItemGroup Condition="$(TargetFramework.StartsWith('net4')) or '$(TargetFramework)' == 'net9.0' or '$(TargetFramework)' == 'net8.0' or $(TargetFramework.EndsWith('-windows10.0.17763.0')) or $(TargetFramework.EndsWith('-windows10.0.19041.0'))">
5680
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" />
5781
</ItemGroup>
58-
<ItemGroup Condition="$(TargetFramework.StartsWith('net9'))">
59-
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="9.0.8" />
60-
<PackageVersion Include="Microsoft.Maui.Controls" Version="9.0.100" />
61-
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="9.0.100" />
62-
</ItemGroup>
63-
<ItemGroup Condition="$(TargetFramework.StartsWith('net8'))">
64-
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.19" />
65-
<PackageVersion Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
66-
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
67-
</ItemGroup>
6882
<ItemGroup Condition="$(TargetFramework.StartsWith('netstandard'))">
69-
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="3.1.32" />
7083
<PackageVersion Include="System.ComponentModel" Version="4.3.0" />
7184
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" />
7285
<PackageVersion Include="System.Diagnostics.Contracts" Version="4.3.0" />

src/ReactiveUI.AOTTests/AdvancedAOTTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ namespace ReactiveUI.AOTTests;
1515
/// Additional AOT compatibility tests for more advanced scenarios.
1616
/// </summary>
1717
[TestFixture]
18+
[NonParallelizable] // These tests modify global state (e.g., Locator.Current)
1819
public class AdvancedAOTTests
1920
{
2021
/// <summary>
@@ -125,7 +126,7 @@ public void MessageBus_Operations_WorkInAOT()
125126
{
126127
var messageBus = new MessageBus();
127128
var received = false;
128-
var testMessage = "test message";
129+
const string testMessage = "test message";
129130

130131
messageBus.Listen<string>().Subscribe(msg =>
131132
{

src/ReactiveUI.AOTTests/ComprehensiveAOTMarkupTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,11 +203,11 @@ public void DependencyInjection_AOTCompatiblePatterns_Work()
203203
var resolver = Locator.CurrentMutable;
204204

205205
// Register concrete implementations (AOT-friendly)
206-
resolver.Register<IScheduler>(() => CurrentThreadScheduler.Instance);
206+
resolver.Register<IScheduler>(static () => CurrentThreadScheduler.Instance);
207207
resolver.RegisterConstant<string>("test service");
208208

209209
// Create a simple factory
210-
resolver.Register<Func<string, ReactiveProperty<string>>>(() => value =>
210+
resolver.Register<Func<string, ReactiveProperty<string>>>(static () => static value =>
211211
{
212212
var scheduler = Locator.Current.GetService<IScheduler>();
213213
return new ReactiveProperty<string>(value, scheduler, false, false);

src/ReactiveUI.AOTTests/ComprehensiveAOTTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void Interactions_WorkInAOT()
5555
var interaction = new Interaction<string, bool>();
5656
var result = false;
5757

58-
interaction.RegisterHandler(context =>
58+
interaction.RegisterHandler(static context =>
5959
{
6060
context.SetOutput(context.Input == "test");
6161
});
@@ -171,7 +171,7 @@ public void DependencyInjection_BasicUsage_WorksInAOT()
171171
var resolver = Locator.CurrentMutable;
172172

173173
// Register concrete types (AOT-friendly)
174-
resolver.Register<IScheduler>(() => CurrentThreadScheduler.Instance);
174+
resolver.Register<IScheduler>(static () => CurrentThreadScheduler.Instance);
175175

176176
// Resolve registered types
177177
var scheduler = Locator.Current.GetService<IScheduler>();

src/ReactiveUI.AOTTests/FinalAOTValidationTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,11 @@ public void DependencyInjection_AdvancedScenarios_WorkInAOT()
173173
var resolver = Locator.CurrentMutable;
174174

175175
// Register services
176-
resolver.Register<IScheduler>(() => CurrentThreadScheduler.Instance);
176+
resolver.Register<IScheduler>(static () => CurrentThreadScheduler.Instance);
177177
resolver.RegisterConstant<string>("test service");
178178

179179
// Create a factory that uses registered services
180-
resolver.Register<Func<ReactiveProperty<string>>>(() => () =>
180+
resolver.Register<Func<ReactiveProperty<string>>>(static () => static () =>
181181
{
182182
var scheduler = Locator.Current.GetService<IScheduler>();
183183
var initialValue = Locator.Current.GetService<string>();

src/ReactiveUI.AOTTests/StringBasedObservationTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void ObservableForProperty_StringName_EmitsInitialThenChanges()
2525
var values = new List<int>();
2626

2727
s.ObservableForProperty<Sample, int>(nameof(Sample.IntValue), beforeChange: false, skipInitial: false, isDistinct: true)
28-
.Select(x => x.Value)
28+
.Select(static x => x.Value)
2929
.Subscribe(values.Add);
3030

3131
s.IntValue = 7;
@@ -45,7 +45,7 @@ public void ObservableForProperty_BeforeChange_EmitsBeforeSetter()
4545
var before = new List<int>();
4646

4747
s.ObservableForProperty<Sample, int>(nameof(Sample.IntValue), beforeChange: true, skipInitial: true, isDistinct: false)
48-
.Select(x => x.Value)
48+
.Select(static x => x.Value)
4949
.Subscribe(before.Add);
5050

5151
s.IntValue = 2; // should emit previous value (1) before change

0 commit comments

Comments
 (0)