能否在WPF/C++/Win32等非MAUI应用中引用MAUI类库?
我创建了名为MauiLib.dll的MAUI类库,希望将其引用到已有的WPF(.NET 6.0)或C++/Win32应用中,是否可行?
我已搜索多日未找到有效信息,尝试直接在WPF应用中引用该类库时出现编译错误:
error MC1000: Unknown build error, 'Could not find assembly 'Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
我还尝试通过CLR/C++和.NET host调用MauiLib.dll中的方法以显示窗口,均出现相同错误:
could not find assembly 'Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
是否需要进行某些配置?注:我的应用仅在Windows运行,使用MAUI或WinUI3是为了尝试新技术。
一、可行性说明
仅在Windows平台下,将MAUI类库引用到WPF或C++/Win32应用是可行的,但MAUI依赖自身的初始化流程和特定运行时环境,直接引用会缺失必要的配置与依赖加载逻辑,这是报错的核心原因。
二、WPF应用修复步骤
匹配MAUI NuGet依赖
在WPF项目的.csproj文件中,添加与MauiLib版本完全一致的MAUI Windows平台依赖包:<ItemGroup> <PackageReference Include="Microsoft.Maui.Controls" Version="7.0.0" /> <!-- 版本需与MauiLib保持统一 --> <PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="7.0.0" /> <PackageReference Include="Microsoft.Maui.Windows" Version="7.0.0" /> </ItemGroup>初始化MAUI运行环境
在WPF应用启动入口(如App.xaml.cs的OnStartup方法)中,添加MAUI初始化代码:protected override void OnStartup(StartupEventArgs e) { // 启动MAUI Windows运行时 var builder = MauiApp.CreateBuilder(); builder.UseMauiApp<MauiApp>(); // 若MauiLib有自定义服务/控件,需在此注册 // builder.Services.AddSingleton<YourMauiService>(); var mauiApp = builder.Build(); mauiApp.Services.GetRequiredService<Microsoft.Maui.IApplication>().CreateWindow(new Microsoft.Maui.Windowing.WindowCreationArgs()); base.OnStartup(e); }调整项目目标框架
确保WPF项目的目标框架为Windows专属版本,修改.csproj:<PropertyGroup> <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> <UseWPF>true</UseWPF> <OutputType>WinExe</OutputType> </PropertyGroup>
三、C++/Win32应用修复步骤
配置.NET Host与程序集路径
确保将MauiLib.dll及MAUI核心程序集(Microsoft.Maui.Controls.dll、Microsoft.Maui.dll等)复制到C++/Win32应用的输出目录,或在初始化.NET Host时指定程序集搜索路径:const wchar_t* appOutputPath = L"你的应用输出目录"; corehost_initialize_parameters initParams{}; initParams.host_path = appOutputPath; initParams.dotnet_root = L"你的.NET 6安装路径"; initParams.probe_paths = appOutputPath; // 指定MAUI程序集所在路径在MauiLib中添加初始化入口
在MauiLib中封装MAUI初始化方法,供C++调用:public static void InitializeMauiRuntime() { var builder = MauiApp.CreateBuilder(); builder.UseMauiApp<MauiApp>(); var mauiApp = builder.Build(); mauiApp.Services.GetRequiredService<Microsoft.Maui.IApplication>().CreateWindow(new Microsoft.Maui.Windowing.WindowCreationArgs()); }C++代码中需先调用该初始化方法,再执行其他业务逻辑。
四、额外注意事项
- 版本严格一致:所有项目的MAUI包版本、.NET版本必须完全匹配,避免依赖冲突。
- Windows平台限制:仅能使用MAUI的Windows平台功能,不要调用其他平台专属API。
- 部署打包:发布时需将MAUI相关程序集、资源文件一同打包,防止运行时缺失依赖。
内容的提问来源于stack exchange,提问作者NormalTerancel

