在运行时从 WinUi桌面中的程序集创建页面 (XAML) 时出错

问题描述

我有两个 WinUI 3(桌面)项目。一个项目是桌面应用程序,另一个项目是类库(用于桌面应用程序)。在库中,我想在 XAML 中定义一个页面并在运行时将其加载到桌面应用程序中(插件概念)。该库名为“MyHome.dll”。在 XAML 中定义了一个页面。该页面的类称为“MyHome”。

加载程序集的代码

var dir = System.AppDomain.CurrentDomain.BaseDirectory;
Assembly MyHomeAssembly = Assembly.LoadFile (dir + "/MyHome.dll");
var page = (Page) Assembly.CreateInstance ("MyHome.MyHome")

程序集已加载。使用调试器,我可以看到包含了“MyHome”类。生成 XAML 分析错误。 我的问题:如何在运行时从类加载页面 (XAML) 和代码 C#)。

解决方法

尝试使用方法 Assembly.LoadFrom() 而不是 Assembly.LoadFile()

这篇文章描述了这两种方法的区别: Difference between LoadFile and LoadFrom with .NET Assemblies?

这里是一个简单的例子,用于在运行时加载模块的即插即用方法。

enter image description here

,

错误继续。 Desktop-App 代码:

private void LoadAssemblys()
        {
            var dir = System.AppDomain.CurrentDomain.BaseDirectory;
            Assembly MyHomeAssembly=Assembly.LoadFrom(dir + "/MyHome.dll");
            System.Type[] types = MyHomeAssembly.GetTypes();
            System.Type primaryTyp = types[0];
            foreach (System.Type t in types)
            {
                if (t.Name == "MyHomePage")
                {
                     var obj = MyHomeAssembly.CreateInstance("MyHome.MyHomePage",true);
                }
            }
        }

dll 是一个带有 xaml-Code 的简单类库项目:

<Page
    x:Class="MyHome.MyHomePage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="using:MyHome"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    mc:Ignorable="d">
    <Grid>
    </Grid>
</Page>

错误: Microsoft.UI.Xaml.Markup.XamlParseException:“XAML”

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...