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

启用PublishAot发布.NET8 Avalonia应用后仍有DLL,如何打包进EXE?

解决方案:将Avalonia + .NET 8 AOT发布时的剩余DLL嵌入EXE

针对.NET 8 + Avalonia启用PublishAot后,av_libglesv2.dll、libHarfBuzzSharp.dll、libSkiaSharp.dll未被打包进单EXE的问题,可通过以下配置调整解决:

1. 确认Avalonia版本

确保使用Avalonia 11.0.7及以上版本,早期版本在.NET 8 AOT场景下存在原生库嵌入的兼容性问题。

2. 调整项目csproj配置

在项目的.csproj文件中添加/修改以下配置,强制将目标原生库嵌入到AOT编译的EXE中:

<PropertyGroup>
  <PublishAot>true</PublishAot>
  <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
  <SelfContained>true</SelfContained>
  <PublishTrimmed>true</PublishTrimmed> <!-- 可选,配合AOT优化体积 -->
  <SkiaSharpEnableAot>true</SkiaSharpEnableAot> <!-- 启用SkiaSharp的AOT支持 -->
</PropertyGroup>

<ItemGroup>
  <!-- 标记目标原生库为嵌入,禁止复制到发布目录 -->
  <NativeLibrary Include="av_libglesv2.dll">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    <Embedded>true</Embedded>
  </NativeLibrary>
  <NativeLibrary Include="libHarfBuzzSharp.dll">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    <Embedded>true</Embedded>
  </NativeLibrary>
  <NativeLibrary Include="libSkiaSharp.dll">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    <Embedded>true</Embedded>
  </NativeLibrary>
</ItemGroup>

3. 正确执行发布命令

发布时必须指定目标运行时标识符(RID),例如针对64位Windows平台:

dotnet publish -c Release -r win-x64

补充说明

  • 上述配置通过NativeLibrary项显式标记需要嵌入的原生库,同时禁止其被复制到发布目录;
  • SkiaSharpEnableAot属性会让SkiaSharp自动适配AOT编译场景,避免原生库加载异常;
  • 如果仍有问题,可检查NuGet包版本,确保SkiaSharp、HarfBuzzSharp和Avalonia的版本相互兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:13:32