0

我有两个 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#)。

4

2 回答 2

0

错误继续。桌面应用程序代码:

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 代码的简单类库项目:

<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”

于 2021-06-28T20:42:49.387 回答
0

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

这篇文章描述了这两种方法之间的区别: LoadFile 和 LoadFrom 与 .NET 程序集的区别?

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

在此处输入图像描述

于 2021-06-28T06:48:22.493 回答