我有一个用于创建SqLite3数据库处理的项目。该项目被多个其他项目占用,而其他多个项目又被UI项目占用。我只将Nuget软件包添加到了处理SqLite3接口的项目中。
当我尝试运行UI时,它将进行调用以从数据库中获取信息,并且当发生这种情况时,我将获得SQLite.Interop.dll的System.DllNotFoundException。
那么我如何在不必将Nuget程序包添加到解决方案中的所有项目的情况下强制其工作?
答案 0 :(得分:0)
也许您的问题类似于this one,在WPF项目中使用Sqlite时经常发生。
似乎SQLite使用入口程序集来检测要加载哪个版本的Interop。
根据您的情况,尝试解决问题的简单方法(先备份):
UI project=>Properties=>Build=>disable the Prefer 32-bit
或更改platform target from Any CPU to X64 or X86
。您不必将nuget添加到解决方案中的所有项目,只需将其添加到UI项目(在您的解决方案中设置为StartUp项目的主项目)就足够了。
此外,您可以尝试Wil's answer,您需要做的是:在UI Project Directory(存在xx.csproj的位置)中创建x64 and x86
文件夹=>查找并复制SQLite.Interop.dll
用于x64和x86到相应的文件夹。然后在VS中,右键单击UI项目=> unload UI project
和edit xx.csproj
=>将工作版本脚本复制到xx.csproj文件中,然后重新加载UI项目。(复制ItemGroup脚本{{ 1}})
在运行应用程序之前,请记住要重建项目。