You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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应用修复步骤

  1. 匹配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>
    
  2. 初始化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);
    }
    
  3. 调整项目目标框架
    确保WPF项目的目标框架为Windows专属版本,修改.csproj:

    <PropertyGroup>
      <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
      <UseWPF>true</UseWPF>
      <OutputType>WinExe</OutputType>
    </PropertyGroup>
    

三、C++/Win32应用修复步骤

  1. 配置.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程序集所在路径
    
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:30:53