C# ClickOnce应用程序无法加载DLL,即使它存在

C# ClickOnce应用程序无法加载DLL,即使它存在,c#,.net,clickonce,C#,.net,Clickonce,我有一个64位的桌面,使用Visual Studio 2015用C#编写,并与ClickOnce一起部署。它依赖于SQLite,我在启动项目中使用以下行将SQLite.Interop.dll文件包括在发布中: 真的 假的 假的 假的 这似乎有效,我可以验证SQLite.Interop.dll的两个副本是否确实部署到名为x86和x64的子文件夹中。但是,一些用户仍然收到无法加载DLL SQLite.Interop.DLL:找不到指定模块的错误消息 奇怪的是,我复制了我的developmentb

我有一个64位的桌面,使用Visual Studio 2015用C#编写,并与ClickOnce一起部署。它依赖于SQLite,我在启动项目中使用以下行将
SQLite.Interop.dll
文件包括在发布中:


真的
假的
假的
假的
这似乎有效,我可以验证
SQLite.Interop.dll
的两个副本是否确实部署到名为
x86
x64
的子文件夹中。但是,一些用户仍然收到
无法加载DLL SQLite.Interop.DLL:找不到指定模块的错误消息

奇怪的是,我复制了我的developmentbin文件夹的内容,并将其放在部署计算机上(位于不同的位置),它运行正常


使用ClickOnce部署应用程序时,是否存在“DLL地狱”问题,即在不同路径中搜索依赖项?

看起来它使用的是COM版本的SQLite。尽管这些文件可能是通过ClickOnce安装的,但我不认为ClickOnce在安装过程中执行COM注册,这可能是您遇到问题的原因。有趣。您是否建议Windows查找并使用在GAC中注册的x86版本,而不是使用我在应用程序中部署的本地副本?这是否解释了为什么我从bin文件夹的副本运行应用程序而不是通过ClickOnce安装应用程序时,它会起作用?有没有办法克服GAC二进制文件的使用?没有。你是如何得出这个结论的?GAC与COM无关。顺便说一句,有两个GAC,一个是x86,另一个是x64(假设它是64位操作系统),使用的GAC取决于进程的位数-所以这在任何情况下都不是原因。所以关于解决方案的任何建议请@MickyD?参考我的第一条评论