From ab8f0d0a0d51527338158ad036002e2c6568cdb7 Mon Sep 17 00:00:00 2001 From: "Yu Leng (from Dev Box)" Date: Tue, 3 Dec 2024 17:51:50 +0800 Subject: [PATCH 1/4] Use AppContext.BaseDirectory to replace assembly.GetExeAseembly.Location. Fix json serilizer aot issue. --- .../FilePreviewCommon/FilePreviewCommon.csproj | 1 + .../Formatters/FilePreviewJsonSerializerContext.cs | 14 ++++++++++++++ .../FilePreviewCommon/Formatters/JsonFormatter.cs | 5 +++-- src/common/FilePreviewCommon/MonacoHelper.cs | 10 ++++------ 4 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 src/common/FilePreviewCommon/Formatters/FilePreviewJsonSerializerContext.cs diff --git a/src/common/FilePreviewCommon/FilePreviewCommon.csproj b/src/common/FilePreviewCommon/FilePreviewCommon.csproj index 28865605a06d..560fbf328704 100644 --- a/src/common/FilePreviewCommon/FilePreviewCommon.csproj +++ b/src/common/FilePreviewCommon/FilePreviewCommon.csproj @@ -2,6 +2,7 @@ + PowerToys FilePreviewCommon diff --git a/src/common/FilePreviewCommon/Formatters/FilePreviewJsonSerializerContext.cs b/src/common/FilePreviewCommon/Formatters/FilePreviewJsonSerializerContext.cs new file mode 100644 index 000000000000..c6d596140765 --- /dev/null +++ b/src/common/FilePreviewCommon/Formatters/FilePreviewJsonSerializerContext.cs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Microsoft.PowerToys.FilePreviewCommon.Monaco.Formatters; + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(JsonDocument))] +internal sealed partial class FilePreviewJsonSerializerContext : JsonSerializerContext +{ +} diff --git a/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs b/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs index 91b7013c6fdd..8d83fd84aa92 100644 --- a/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs +++ b/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs @@ -14,7 +14,6 @@ public class JsonFormatter : IFormatter private static readonly JsonSerializerOptions _serializerOptions = new JsonSerializerOptions { - WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, }; @@ -28,7 +27,9 @@ public string Format(string value) using (var jDocument = JsonDocument.Parse(value, new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip })) { - return JsonSerializer.Serialize(jDocument, _serializerOptions); + FilePreviewJsonSerializerContext context = new(_serializerOptions); + + return JsonSerializer.Serialize(jDocument, context.JsonDocument); } } } diff --git a/src/common/FilePreviewCommon/MonacoHelper.cs b/src/common/FilePreviewCommon/MonacoHelper.cs index e8442c0bff63..303cacbde287 100644 --- a/src/common/FilePreviewCommon/MonacoHelper.cs +++ b/src/common/FilePreviewCommon/MonacoHelper.cs @@ -6,9 +6,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Reflection; using System.Text.Json; - using Microsoft.PowerToys.FilePreviewCommon.Monaco.Formatters; namespace Microsoft.PowerToys.FilePreviewCommon @@ -38,15 +36,15 @@ public static class MonacoHelper private static string GetRuntimeMonacoDirectory() { - string exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty; + string baseDirectory = AppContext.BaseDirectory ?? string.Empty; // If the executable is within "WinUI3Apps", correct the path first. - if (Path.GetFileName(exePath) == "WinUI3Apps") + if (Path.GetFileName(baseDirectory) == "WinUI3Apps") { - exePath = Path.Combine(exePath, ".."); + baseDirectory = Path.Combine(baseDirectory, ".."); } - string monacoPath = Path.Combine(exePath, "Assets", "Monaco"); + string monacoPath = Path.Combine(baseDirectory, "Assets", "Monaco"); return Directory.Exists(monacoPath) ? monacoPath : From afcedadb8e3c722a4a38b33a0cc582f82a3eea59 Mon Sep 17 00:00:00 2001 From: "Yu Leng (from Dev Box)" Date: Wed, 4 Dec 2024 14:46:25 +0800 Subject: [PATCH 2/4] clean up some AOT build issue --- .../MarkdownPreviewHandler/MarkdownPreviewHandler.csproj | 3 ++- .../MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandler.csproj b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandler.csproj index 074b94ec5c3f..6d0fe10677e6 100644 --- a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandler.csproj +++ b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandler.csproj @@ -1,7 +1,8 @@ - + + enable diff --git a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs index 89f480c792c1..de7ab44efaf0 100644 --- a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs +++ b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs @@ -20,7 +20,7 @@ namespace Microsoft.PowerToys.PreviewHandler.Markdown /// /// Win Form Implementation for Markdown Preview Handler. /// - public class MarkdownPreviewHandlerControl : FormHandlerControl + public partial class MarkdownPreviewHandlerControl : FormHandlerControl { private static readonly IFileSystem FileSystem = new FileSystem(); private static readonly IPath Path = FileSystem.Path; @@ -66,7 +66,8 @@ public static string AssemblyDirectory { get { - string codeBase = Assembly.GetExecutingAssembly().Location; + string codeBase = AppContext.BaseDirectory; + UriBuilder uri = new UriBuilder(codeBase); string path = Uri.UnescapeDataString(uri.Path); return Path.GetDirectoryName(path); From 3595aad6fe388958e0133e445a67b02232b01c3b Mon Sep 17 00:00:00 2001 From: moooyo <42196638+moooyo@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:53:56 +0800 Subject: [PATCH 3/4] Update src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com> --- .../MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs index de7ab44efaf0..189d72c9d474 100644 --- a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs +++ b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs @@ -67,7 +67,6 @@ public static string AssemblyDirectory get { string codeBase = AppContext.BaseDirectory; - UriBuilder uri = new UriBuilder(codeBase); string path = Uri.UnescapeDataString(uri.Path); return Path.GetDirectoryName(path); From 47cdc25e7735ece2068d074ac2dffc973f7dd248 Mon Sep 17 00:00:00 2001 From: moooyo <42196638+moooyo@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:54:02 +0800 Subject: [PATCH 4/4] Update src/common/FilePreviewCommon/Formatters/JsonFormatter.cs Co-authored-by: Jeremy Sinclair <4016293+snickler@users.noreply.github.com> --- src/common/FilePreviewCommon/Formatters/JsonFormatter.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs b/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs index 8d83fd84aa92..7d969db56de3 100644 --- a/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs +++ b/src/common/FilePreviewCommon/Formatters/JsonFormatter.cs @@ -28,7 +28,6 @@ public string Format(string value) using (var jDocument = JsonDocument.Parse(value, new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip })) { FilePreviewJsonSerializerContext context = new(_serializerOptions); - return JsonSerializer.Serialize(jDocument, context.JsonDocument); } }