Visual Studio 2017 UWP项目加载SQLite.Interop.dll失败求助
我太懂这种卡壳的感觉了——你碰到的DllNotFoundException: Unable to load DLL 'SQLite.Interop.dll'错误,在UWP+Xamarin的场景下确实特别磨人,尤其是你已经试了这么多常规方案都没解决。我来分享几个容易被忽略的排查方向和解决办法:
统一NuGet包版本并彻底重装
很多时候问题出在SQLite相关包的版本不一致上:确保你项目里所有SQLite相关的NuGet包(比如System.Data.SQLite、SQLite-net-pcl以及它们的依赖包)版本完全匹配。建议先彻底卸载所有SQLite包,手动删除项目的bin和obj文件夹清理残留,再重新安装对应UWP平台的最新稳定版包。手动在UWP项目配置中指定DLL复制规则
有时候NuGet的自动复制规则在UWP项目里会失效,你可以直接编辑UWP项目的.csproj文件,添加以下配置(记得替换版本号和架构路径):<ItemGroup> <Content Include="$(SolutionDir)packages\System.Data.SQLite.Core.1.0.118\build\netstandard2.0\runtimes\win10-x64\native\SQLite.Interop.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Link>SQLite.Interop.dll</Link> </Content> </ItemGroup>这里的
win10-x64可以根据你需要的架构换成win10-x86,版本号改成你实际安装的NuGet包版本。确认VC++运行时依赖的完整性
你已经试过2015的VC运行时,但可以试试安装**2017及以后版本的VC桌面运行时包**(x86和x64都装)。另外,检查UWP项目的Package.appxmanifest文件,确保依赖项里包含了对应的VC++包:<Dependencies> <PackageDependency Name="Microsoft.VCLibs.140.00.UWPDesktop" MinVersion="14.0.30035.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" /> </Dependencies>验证输出目录的DLL状态
启动调试后,找到UWP应用的输出目录(一般是bin\x64\Debug\AppX),确认SQLite.Interop.dll是否存在,并且版本正确。如果不存在,手动从NuGet包的runtimes目录复制到这个路径再调试。还可以用Dependency Walker工具打开这个DLL,检查它是否有缺失的底层依赖项——有时候问题根源是VC++的某个子DLL没加载成功。用全新项目做对比测试
如果以上方法都不行,建议创建一个全新的UWP空白项目,只添加SQLite包并写一段简单的测试代码(比如创建数据库、插入一条数据)。如果新项目能正常运行,那说明原项目的配置存在冲突,可以逐步迁移代码过去排查问题点。
内容的提问来源于stack exchange,提问作者Vallo

