
















想法是主程序尽量的简单,其他的尽量按需调用。
所以把Demo这个主程序的内容大部分移到LunZi.Common项目去了。
public static MauiApp CreateMauiApp()
{
try
{
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(@"C:\Plugin\windows\LunZi.Common.dll");
var type = assembly.GetType("LunZi.Common.MauiProgram");
var method = type!.GetMethod("CreateMauiApp", BindingFlags.Static | BindingFlags.Public);
var app = (MauiApp)method!.Invoke(null, null)!;
return app;
}
catch (Exception ex)
{
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp<App>();
var msg = ex.Message + "\r\n" + ex.StackTrace;
if (ex.InnerException != null)
msg += "\r\n-----------InnerException--------------------\r\n" + ex.InnerException.ToString();
builder.Services.AddSingleton(ii => new MainPage(msg));
return builder.Build();
}
}
public static class MauiProgram
{
public static List<string> AssemblyNames { get; set; } = new();
public static MauiApp CreateMauiApp()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
return Create();
}
private static MauiApp Create()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseMauiCommunityToolkit()
.UseMauiCommunityToolkitMarkup()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
builder.AddLunZiService();
var app = builder.Build();
app.InitializeLunZi();
return app;
}
private static Assembly? CurrentDomain_AssemblyResolve(object? sender, ResolveEventArgs args)
{
var name = args.Name.Split(',')[0].Trim();
string fullName = Path.Combine(@"c:\plugin\packages", name.EndsWith(".resources") ? Thread.CurrentThread.CurrentCulture.Name : "", name + ".dll");
if (File.Exists(fullName))
{
AssemblyNames.Add(name);
return AssemblyLoadContext.Default.LoadFromAssemblyPath(fullName);
}
else
return default;
}
}
以后Demo将基本不动,只要修改LunZi.Common,增加其他类库。想着公司刚好要开发Maui的程序,接一下就以公司产品为例,折腾折腾这个插件开发。
哦,我公司是开发酒店自助入住程序的,所以将会有这么一些插件

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。