解决在.Net Native编译含有SQLCihper包报错问题

在Uwp应用程序中,引用"SQLitePCLRaw.bundle_e_sqlcipher"Nuget包后,采用.Net Native工具链编译会失败,错误消息为:

SQLitePCL.ISQLite3Provider.sqlite3_stmt_isexplain(SQLitePCL.sqlite3_stmt)' is missing implementation


造成此错误的原因是,该应用还同时引用了AppCenter。这个nuget包依赖老版本的bundle_green,和bundle_sqlcipher起了冲突。


目前的解决措施就是将AppCenter中有冲突的部分排除出去,即可顺利通过编译。而且App运行时,AppCenter的相关功能也是可以正常运转的。项目的csproj文件中引用包的部分按照以下方式引用AppCenter和SQPCihper:

  1 <ItemGroup>
  2    <PackageReference Include="Microsoft.AppCenter">
  3       <Version>4.3.0</Version>
  4    </PackageReference>
  5    <PackageReference Include="sqlite-net-base">
  6       <Version>1.7.335</Version>
  7    </PackageReference>
  8    <PackageReference Include="sqlite-net-pcl">
  9       <Version>1.7.335</Version>
 10       <ExcludeAssets>All</ExcludeAssets>
 11    </PackageReference>
 12    <PackageReference Include="SQLitePCLRaw.bundle_e_sqlcipher">
 13       <Version>2.0.5-pre20210817120427</Version>
 14    </PackageReference>
 15    <PackageReference Include="SQLitePCLRaw.bundle_green">
 16       <Version>2.0.5-pre20210817120427</Version>
 17       <ExcludeAssets>All</ExcludeAssets>
 18    </PackageReference>
 19 </ItemGroup>

值得注意的是:

版本为2.0.5-pre20210824155428的SQLitePCLRaw.bundle_e_sqlcipher有点问题,其中包含的Arm版本的sqlite库可能放成了x64版本。


参考:

0.报错的具体描述:https://github.com/ericsink/SQLitePCL.raw/issues/372

1.问题的分析过程:https://github.com/ericsink/SQLitePCL.raw/issues/229

2.问题的解决方案:https://github.com/microsoft/appcenter-sdk-dotnet/issues/569

原文地址:https://www.cnblogs.com/optimo/p/15221957.html