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

ARM64 UWP桌面扩展加载e_sqlite3.dll报错:非有效Win32应用

解决UWP桌面桥(.NET Framework 4.7.2)ARM64架构下SQLite原生DLL配置问题

核心问题分析

UWP桌面桥应用的ARM64打包逻辑和普通.NET Framework控制台应用存在差异,原生DLL的部署路径、架构匹配规则有特殊要求:

  • 直接复制win-arm64版本的e_sqlite3.dll到输出目录时,桌面桥的进程加载上下文无法正确识别ARM64原生库,导致抛出无效Win32应用错误。
  • SQLitePCLRaw相关包的默认部署逻辑未适配桌面桥环境下的ARM64打包规则。

分步解决方案

1. 调整DesktopExtension项目的.csproj配置

在桌面扩展项目的.csproj文件中添加以下配置,确保ARM64原生DLL被正确打包到架构对应的子目录,并在运行时被正确加载:

<PropertyGroup>
  <!-- 启用按架构分组输出原生库 -->
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

<Target Name="CopyArm64SqliteNativeDll" AfterTargets="CopyFilesToOutputDirectory" Condition="'$(PlatformTarget)' == 'ARM64'">
  <!-- 从NuGet包目录复制ARM64版本的e_sqlite3.dll到对应运行时路径 -->
  <Copy
    SourceFiles="$(NuGetPackageRoot)\sqlitepclraw.lib.e_sqlite3\2.1.5\runtimes\win-arm64\native\e_sqlite3.dll"
    DestinationFolder="$(OutputPath)\runtimes\win-arm64\native"
    SkipUnchangedFiles="true"
  />
</Target>

<Target Name="EnsureArm64RuntimeDirectory" BeforeTargets="Build" Condition="'$(PlatformTarget)' == 'ARM64'">
  <!-- 确保运行时目录存在 -->
  <MakeDir Directories="$(OutputPath)\runtimes\win-arm64\native" />
</Target>

注意:替换sqlitepclraw.lib.e_sqlite3的版本号为你实际安装的版本(可在NuGet包管理器中查看)。

2. 强制SQLitePCLRaw加载ARM64原生库

在桌面扩展项目的启动代码(如Program.cs的Main方法开头)添加以下代码,强制指定加载ARM64版本的原生库,绕过默认的自动检测逻辑:

using SQLitePCL;

// 初始化前指定ARM64原生库路径
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
SQLitePCL.raw.FreezeProvider();

3. 调整UWP主项目的打包配置

  • 打开UWP主项目的Package.appxmanifest,切换到「打包」选项卡,在「支持的架构」中勾选ARM64。
  • 确保桌面扩展的引用配置包含ARM64平台输出,示例配置如下:
<Extensions>
  <desktop:Extension Category="windows.fullTrustProcess" Executable="DesktopExtension\DesktopExtension.exe">
    <desktop:FullTrustProcess>
      <desktop:ParameterGroup GroupId="Default" Parameters="" />
    </desktop:FullTrustProcess>
  </desktop:Extension>
</Extensions>

4. 清理并重新构建

  • 右键所有项目选择「清理」,清空输出目录。
  • 在Visual Studio架构选择器中选择ARM64,重新构建整个解决方案。
  • 部署到ARM64设备时选择「部署」而非仅「生成」,让Visual Studio正确处理桌面桥的打包逻辑。

验证方法

部署完成后,在设备上查看应用安装目录下的DesktopExtension文件夹,确认存在runtimes\win-arm64\native\e_sqlite3.dll文件,可通过PowerShell命令查看文件架构:

Get-Item <dll文件路径> | Select-Object -ExpandProperty VersionInfo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:33:18