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

如何在MAUI项目中仅为Windows平台引入原生Windows库?

如何仅在MAUI的Windows构建中包含原生DLL,排除其他平台?

要实现只让Windows原生DLL纳入Windows平台的构建/包,同时不进入Android、iOS等其他平台,有两种可靠的原生MSBuild配置方案,比手动复制或无效的清单配置更合适:

方案1:通过MSBuild平台条件在.csproj中精准控制

在项目的.csproj文件中,给DLL的包含项添加Windows目标框架专属的条件,这样只有构建Windows版本时才会处理该DLL:

<ItemGroup Condition="'$(TargetFramework)' == 'net8.0-windows10.0.19041.0'">
  <!-- 替换为你的DLL实际路径 -->
  <Content Include="Libraries\Windows\MyNativeLib.dll">
    <!-- 确保DLL复制到输出目录 -->
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <!-- 发布时也会将DLL纳入包 -->
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    <!-- 可选:指定输出后的文件名,避免路径嵌套 -->
    <Link>MyNativeLib.dll</Link>
  </Content>
</ItemGroup>
  • 注意替换$(TargetFramework)的值为你项目实际使用的Windows目标框架(比如net7.0-windows10.0.19041.0)。
  • 这个条件会让MSBuild仅在构建Windows平台时才将该DLL标记为需要复制和打包的内容,其他平台完全忽略。

方案2:利用MAUI的Platforms目录自动隔离

MAUI默认会将Platforms目录下对应平台子文件夹的内容与该平台构建绑定,你可以把Windows原生DLL直接放在Platforms/Windows目录下,然后在.csproj中添加如下配置:

<ItemGroup>
  <Content Include="Platforms\Windows\MyNativeLib.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
</ItemGroup>

MAUI的构建系统会自动识别该文件属于Windows平台,不会将其包含到其他平台的构建包中。如果你的DLL需要按架构区分(比如x64、arm64),可以在Platforms/Windows下再创建对应架构的子文件夹,然后调整Include路径即可。


为什么你之前尝试的方法效果不好?

  • 后期构建脚本复制:AppX包是在打包阶段生成的,手动复制容易出现时机不对、路径变动等问题,不属于MAUI原生支持的打包流程,维护性差。
  • 全局添加DLL到.csproj:没有添加平台条件,MSBuild会默认将该文件包含到所有平台的构建中,不符合需求。
  • app.manifest引用:MAUI Windows的打包逻辑依赖Package.appxmanifest,普通的app.manifest仅用于应用运行时的配置,不会影响打包时的文件包含规则,所以修改它不会让DLL被纳入AppX包。

内容的提问来源于stack exchange,提问作者Wes Hodges

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:25:33