问题描述
我有两个 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?
这里是一个简单的例子,用于在运行时加载模块的即插即用方法。
,错误继续。 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”