diff --git a/src/UniGetUI.Core.Tools.Tests/MetaTests.cs b/src/UniGetUI.Core.Tools.Tests/MetaTests.cs index 2f1897e5c..34861a91f 100644 --- a/src/UniGetUI.Core.Tools.Tests/MetaTests.cs +++ b/src/UniGetUI.Core.Tools.Tests/MetaTests.cs @@ -67,6 +67,34 @@ public void TestHttpClientInstantiation() } } + [Fact] + public void TestJsonSerializerContextsDoNotReuseSharedOptions() + { + var solutionDirectory = FindRepositoryRoot(); + var csFiles = Directory + .GetFiles(solutionDirectory, "*.cs", SearchOption.AllDirectories) + .Where(file => + !file.Contains(@"bin\") + && !file.Contains(@"obj\") + && !file.EndsWith(".g.cs") + && !file.EndsWith("Tests.cs") + ); + + Regex forbiddenPattern = new( + @"JsonContext\s+\w+\s*=\s*new\(\s*SerializationHelpers\.DefaultOptions\s*\)", + RegexOptions.Multiline + ); + + foreach (var file in csFiles) + { + var fileContent = File.ReadAllText(file); + Assert.False( + forbiddenPattern.IsMatch(fileContent), + $"File {file} reuses SerializationHelpers.DefaultOptions when constructing a generated JsonSerializerContext. Clone the options first to avoid rebinding the shared resolver." + ); + } + } + private static string FindRepositoryRoot() { DirectoryInfo? currentDirectory = new(AppDomain.CurrentDomain.BaseDirectory); diff --git a/src/UniGetUI/AutoUpdater.cs b/src/UniGetUI/AutoUpdater.cs index 7342aac5a..9b02284c2 100644 --- a/src/UniGetUI/AutoUpdater.cs +++ b/src/UniGetUI/AutoUpdater.cs @@ -40,7 +40,7 @@ public partial class AutoUpdater ]; private static readonly AutoUpdaterJsonContext ProductInfoJsonContext = new( - SerializationHelpers.DefaultOptions + new JsonSerializerOptions(SerializationHelpers.DefaultOptions) ); public static Window Window = null!;