浏览代码

Root assemblies for SRE XAML loader (#18290)

* Root assemblies for SRE XAML loader

* Update XamlTestBase.cs
Maxwell Katz 7 月之前
父节点
当前提交
5e7963b545

+ 9 - 0
src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs

@@ -74,6 +74,15 @@ namespace Avalonia.Markup.Xaml.XamlIl
         [MemberNotNull(nameof(_ignoresAccessChecksFromAttribute))]
         static void InitializeSre()
         {
+            // SRE backend doesn't load assemblies, unless they are already in the memory.
+            // At the very least, we should make sure that assemblies necessary for `AvaloniaXamlIlWellKnownTypes` are loaded.
+            // Root `Avalonia.Controls`.
+            GC.KeepAlive(typeof(Avalonia.Controls.Control));
+            // Root `Avalonia.Markup`.
+            GC.KeepAlive(typeof(Avalonia.Data.Binding));
+            // Root `System.ObjectModel`
+            GC.KeepAlive(typeof(System.ComponentModel.TypeConverterAttribute));
+
             if (_sreTypeSystem == null)
                 _sreTypeSystem = new SreTypeSystem();
             if (_sreBuilder == null)

+ 0 - 9
tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs

@@ -10,15 +10,6 @@ using Avalonia.UnitTests;
 
 namespace Avalonia.Markup.Xaml.UnitTests
 {
-    static class XamlLoaderInit
-    {
-        [ModuleInitializer]
-        public static void Init()
-        {
-            var _ = typeof(Binding);
-        }
-    }
-    
     public class XamlTestBase : ScopedTestBase
     {
         public XamlTestBase()