在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