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

ef1yzkbh  于 2023-08-01  发布在  其他
关注(0)|答案(2)|浏览(129)

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

xyhw6mcr

xyhw6mcr1#

尝试使用方法Assembly.LoadFrom()而不是Assembly.LoadFile()
这篇文章描述了这两种方法之间的区别:Difference between LoadFile and LoadFrom with .NET Assemblies?
下面是一个简单的例子,即插即用方法在运行时加载模块。


的数据

h7wcgrx3

h7wcgrx32#

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

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是一个简单的class-library-Project,带有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”

相关问题