无法在Mobile上运行的通用Windows应用程序中加载DLL sqlite3

时间:2015-08-06 08:49:07

标签: sqlite sqlite-net uwp

我正在开发一个UWP。我正在使用sqlite-net-pcl库。将我的应用程序从RC升级到RTM后,我收到运行时错误 - 无法找到sqlite3.dll - 如果它在Mobile模拟器或设备上运行。在我添加了对C ++ 2013 Runtime Package的引用并在Local Machine中运行它之后,它完美地工作了。

异常消息:

  

消息“'SQLitePCL.raw'的类型初始化程序引发了一个   例外。“string

innerexception消息:

  

{“无法加载DLL的sqlite3':指定的模块不能   找到。 (来自HRESULT的异常:0x8007007E)“} System.Exception   {System.DllNotFoundException}

当然我无法为'Sqlite for Universal App Platform'添加引用,因为我发现了以下错误

  

严重级代码说明项目文件行错误有效负载包含   两个或多个具有相同目标路径'sqlite3.dll'的文件。资源   files:C:\ Program Files(x86)\ Microsoft   软件开发工具包\ UAP \ v0.8.0.0 \ ExtensionSDKs \ SQLite.UAP.2015 \ 3.8.11.1 \的Redist \调试\ ARM \ sqlite3.dll   C:\ Users \ sMavrikis.nuget \ packages \ SQLitePCL.raw_basic \ 0.7.1 \ build \ native \ sqlite3_dynamic \ winrt81 \ arm \ sqlite3.dll TestApp1

7 个答案:

答案 0 :(得分:33)

添加对“通用应用平台的SQLite”的引用' 这将触发错误:

  

Payload包含两个或多个具有相同目标路径的文件' sqlite3.dll'。

发生此错误是因为错误标记的位置中的sqlite3.dll版本不同。 只需复制

即可解决此错误
  

C:\ Program Files(x86)\ Microsoft SDKs \ UAP \ v0.8.0.0 \ ExtensionSDKs \ SQLite.UAP.2015 \ 3.8.11.1 \ Redist \ Debug \ ARM \ sqlite3.dll

  

C:\用户\%USERNAME%\的NuGet \包\ SQLitePCL.raw_basic \ 0.7.1 \构建\天然\ sqlite3_dynamic \ winrt81 \臂\ sqlite3.dll

覆盖现有文件。

重建您的项目。它现在应该编译。

答案 1 :(得分:9)

如果你看看两个相互冲突的位置,一个似乎来自一个更正式的微软UWP扩展,而第二个来自一个nuGet包。

当我遇到这个错误时,我需要nuGet包的功能,所以我决定保留它并删除其他引用。我右键单击解决方案资源管理器中的项目,然后转到Add-> Reference,然后取消选中对SQLite的引用。看起来比将文件从一个位置复制到另一个位置更容易出错。

enter image description here

答案 2 :(得分:2)

我收到了相同的错误消息。我开始使用SQLite-PCL,它也需要SQLite作为Universal App Platform作为参考。后来我改用了SQLite.Net-PCL。那是我遇到这些错误的时候。在研究解决方案时,我找到了这个页面。它工作了一点。最后,我删除了针对Universal App Platform的SQLite参考,错误消失了。

答案 3 :(得分:0)

迟到的回复,但现在有问题;对我来说解决的是对解决方案中的所有项目进行Nuget Package更新,因为其中一个软件包仍在使用旧的引用,并且正在进入引用已过期的其他项目的Running项目。

答案 4 :(得分:0)

我通过在编译器配置中选择x64或arm修复了类似的问题。

  

错误Payload包含两个或多个具有相同目标路径'e_sqlite3.dll'的文件。源文件:   C:\ Users \用户xleon.nuget \包\ SQLitePCLRaw.lib.e_sqlite3.v140 \ 1.1.0 \运行时\ win10臂\本地\ e_sqlite3.dll   C:\ Users \用户xleon.nuget \包\ sqlitepclraw.lib.e_sqlite3.v140 \ 1.1.0 \运行时\ win10 86 \天然\ e_sqlite3.dll

但是,这当然不允许你运行模拟器

答案 5 :(得分:0)

右键单击UWP项目,然后选择“属性”。

确保Solution Platform目标与Project Platform目标匹配。

如果它们不同,您将收到有关将文件复制到具有相同名称(但目标平台不同)的同一目标的构建错误。

Ensure matching target platforms

答案 6 :(得分:0)

我设法通过在UWP .csproj中添加一个包含SQLite dll的条件来解决这种差异

<SDKReference Include="SQLite.UWP.2015, Version=3.19.3" Condition="'$(Configuration)'=='Debug'">
  <Name>SQLite for Universal Windows Platform</Name>
</SDKReference>

我需要使用UWP版本进行调试,否则我的XAMl设计师会因为#34而无法找到SQLite.dll ...&#34;