上面的答案似乎都不适用于我,也许是因为我在VS2015上,但是这让我感到很有理由在此问题上添加自己的解决方案。
我的具体情况与@Eternal21相同 - 我有一个WPF UI使用客户端库,它是通过nuget将SQLite添加到其中的客户端库。而且,是的,问题在于Interop.dll未被复制到启动应用程序(即没有安装SQLite的WPF UI)。
如果您急于使用,简单地使用nuget将SQLite添加到WPF项目的解决方案是一个快速简便的解决方案。
我的一个稍微笨拙的解决方案使用XCOPY,但具有复制x86和x64目录的优点,并且还可以处理Debug和Release版本。它的缺点是它包含硬编码的项目名称。我可以看到你如何使用宏来摆脱第一个宏,但我不能轻易看到如何摆脱第二个,所以如果项目名称改变,你将不得不手动改变它(但这是相当罕见的)。
我的解决方法是在启动项目的生成后,使用这些命令XCOPY:
xcopy $(SolutionDir)DALProject\bin\$(ConfigurationName)\x64\SQLite.Interop.dll $(SolutionDir)WPFProject\bin\$(ConfigurationName)\x64\*.* /C /F /S /E /Y
xcopy $(SolutionDir)DALProject\bin\$(ConfigurationName)\x86\SQLite.Interop.dll $(SolutionDir)WPFProject\bin\$(ConfigurationName)\x86\*.* /C /F /S /E /Y
/C - 继续复制即使(也许这是没有必要的)错误。
/F - 显示正在复制的文件的完整路径(可省略以清除构建输出)。
/S - 复制子目录(这是我能够创建/ x86和/ x64文件夹的唯一方法)。
/E - 复制目录和子目录(可能重复/ S)。
/Y - 如果目标文件已存在,则禁止提示。
我设置它只在成功构建时运行,它对我来说是一种享受。希望它能帮助别人。
有趣的是,我看到他们在那里。那么,它将它们复制到在运行时无法找到的地方?我想知道它是否适用于机器特定的版本。我尝试了x86和x64版本,但有错误。可能是我的一个问题,不确定。 – Vimes 2014-11-11 17:49:21
*在运行时发现*。如果我删除这些文件夹,则会出现加载错误。如果我不这样做,它会起作用。我只发现这一点,因为我是从输出目录复制文件到另一个位置运行,而我没有复制子目录。 – Richard 2014-11-12 13:39:16
不适合我。我在运行时遇到了DllNotFoundException。您的所有项目都是以AnyCPU的形式构建的吗? – Vimes 2014-11-12 18:59:45