From 8d5b5ee07e2bd3d0bb56b34dd0ea3c2dc767de1b Mon Sep 17 00:00:00 2001 From: nor0x Date: Tue, 2 Jun 2026 14:34:46 +0200 Subject: [PATCH 1/3] fixes 4578 starting with .NET 10 DestinationPage and PreviousPage in NavigatedFromEventArgs and NavigatedToEventArgs are no longer internal so no need for getting them via reflection in PageNavigationExtensions. see: https://github.com/getsentry/sentry-dotnet/issues/4578 and: https://github.com/dotnet/maui/pull/28384 --- .../Internal/PageNavigationExtensions.cs | 20 +++++++++++++------ .../MauiEventsBinderTests.Page.cs | 2 -- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Sentry.Maui/Internal/PageNavigationExtensions.cs b/src/Sentry.Maui/Internal/PageNavigationExtensions.cs index 9ce0a221c6..10b835355c 100644 --- a/src/Sentry.Maui/Internal/PageNavigationExtensions.cs +++ b/src/Sentry.Maui/Internal/PageNavigationExtensions.cs @@ -4,6 +4,7 @@ namespace Sentry.Maui.Internal; internal static class PageNavigationExtensions { +#if !NET10_0_OR_GREATER private static readonly PropertyInfo? DestinationPageProperty; private static readonly PropertyInfo? PreviousPageProperty; @@ -15,22 +16,29 @@ static PageNavigationExtensions() return; } DestinationPageProperty = typeof(NavigatedFromEventArgs) - .GetProperty("DestinationPage", BindingFlags.Instance | BindingFlags.NonPublic); + .GetProperty("DestinationPage", BindingFlags.Instance | BindingFlags.Public); PreviousPageProperty = typeof(NavigatedToEventArgs) - .GetProperty("PreviousPage", BindingFlags.Instance | BindingFlags.NonPublic); + .GetProperty("PreviousPage", BindingFlags.Instance | BindingFlags.Public); } +#endif /// - /// Reads the (internal) NavigatedFromEventArgs.DestinationPage property via reflection. - /// Note that this will return null if trimming is enabled. + /// Gets the destination page from navigation arguments. /// public static Page? GetDestinationPage(this NavigatedFromEventArgs eventArgs) => +#if NET10_0_OR_GREATER + eventArgs.DestinationPage; +#else DestinationPageProperty?.GetValue(eventArgs) as Page; +#endif /// - /// Reads the (internal) NavigatedFromEventArgs.PreviousPage property via reflection. - /// Note that this will return null if trimming is enabled. + /// Gets the previous page from navigation arguments. /// public static Page? GetPreviousPage(this NavigatedToEventArgs eventArgs) => +#if NET10_0_OR_GREATER + eventArgs.PreviousPage; +#else PreviousPageProperty?.GetValue(eventArgs) as Page; +#endif } diff --git a/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs b/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs index d361e5d340..66f33b1e30 100644 --- a/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs +++ b/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs @@ -88,11 +88,9 @@ public void Page_NavigatedTo_AddsBreadcrumb() Assert.Equal(MauiEventsBinder.NavigationType, crumb.Type); Assert.Equal(MauiEventsBinder.NavigationCategory, crumb.Category); crumb.Data.Should().Contain($"{nameof(Page)}.Name", "page"); -#if !NET10_0 // TODO: Work out why these are missing in .NET 10 crumb.Data.Should().Contain("PreviousPage", nameof(Page)); crumb.Data.Should().Contain("PreviousPage.Name", "otherPage"); -#endif } [Fact] From e79be243014a5b9badd1f9b0a66a5cf6daee2495 Mon Sep 17 00:00:00 2001 From: nor0x Date: Tue, 2 Jun 2026 14:44:24 +0200 Subject: [PATCH 2/3] access pre-.NET 10 navigation pages via non-public reflection --- src/Sentry.Maui/Internal/PageNavigationExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Sentry.Maui/Internal/PageNavigationExtensions.cs b/src/Sentry.Maui/Internal/PageNavigationExtensions.cs index 10b835355c..a693b4b2ff 100644 --- a/src/Sentry.Maui/Internal/PageNavigationExtensions.cs +++ b/src/Sentry.Maui/Internal/PageNavigationExtensions.cs @@ -16,9 +16,9 @@ static PageNavigationExtensions() return; } DestinationPageProperty = typeof(NavigatedFromEventArgs) - .GetProperty("DestinationPage", BindingFlags.Instance | BindingFlags.Public); + .GetProperty("DestinationPage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); PreviousPageProperty = typeof(NavigatedToEventArgs) - .GetProperty("PreviousPage", BindingFlags.Instance | BindingFlags.Public); + .GetProperty("PreviousPage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } #endif From fffa8283acaf30e8c2b82c08bfdf965a1565e1cd Mon Sep 17 00:00:00 2001 From: nor0x Date: Tue, 2 Jun 2026 15:19:09 +0200 Subject: [PATCH 3/3] todo done --- test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs b/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs index 66f33b1e30..aa635f76d6 100644 --- a/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs +++ b/test/Sentry.Maui.Tests/MauiEventsBinderTests.Page.cs @@ -88,7 +88,6 @@ public void Page_NavigatedTo_AddsBreadcrumb() Assert.Equal(MauiEventsBinder.NavigationType, crumb.Type); Assert.Equal(MauiEventsBinder.NavigationCategory, crumb.Category); crumb.Data.Should().Contain($"{nameof(Page)}.Name", "page"); - // TODO: Work out why these are missing in .NET 10 crumb.Data.Should().Contain("PreviousPage", nameof(Page)); crumb.Data.Should().Contain("PreviousPage.Name", "otherPage"); }