请问怎么解决SQLite在64位下的部署

fanzouguo 2014-11-06 10:11:22
我的一个ASP.NET程序,引用了我自己的一个类库(姑且叫ABC.DLL),ABC.DLL又引用了SQLite.dll,发布情况如下:
【X86模式】
ABC.DLL引用X86版的SQLite.DLL,并生成32位的ABC.DLL供ASP.NET引用。
【X64模式】
ABC.DLL引用X64版的SQLite.DLL,并生成64位的ABC.DLL供ASP.NET引用。

现在32位下运行没有问题,但是一转到64位模式下,就会提示
”未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。试图加载格式不正确的程序“
网上搜了很久,大多都是说什么在IIS下将“使用32位应用程序”,设为True.

我想问的是:
1、如果把“使用32位应用程序”设为True,是不是仅仅达到了让64位环境下编译的程序运行起来的目的,而实际的运行还是基于32位环境运行的呢?
2、有没有其他的解决方案,直接使其在纯64位环境中运行?

PS:大家都能够看得出,能问出这种水平问题的人,水平都不咋地,所以请给出直观的答案,尽量别喷,特别是那些挂着满天星的,谢谢。
...全文
791 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shihao316558512 2015-04-24
  • 打赏
  • 举报
回复
引用 1 楼 github_22161131 的回复:
SQLite官方最新的ado.net provider是同时支持x86和x64方式的(nuget上的System.Data.SQLite或者System.Data.SQLite.Core),这里面的System.Data.SQLite.dll是Any CPU的,所以你的ABC.DLL也不需要分两种了,一样使用Any CPU方式就能同时支持两种环境了。如果使用上面的nuget包,它会自动在编译的时候copy依赖的两种SQLite.Interop.dll到bin目录。运行时System.Data.SQLite.dll默认会根据环境自动选择合适的SQLite.Interop.dll加载。
为什么 我试了 却 不可行呢,还是报 找不到请求的 .Net Framework Data Provider。可能没有安装。 的错误
shihao316558512 2015-04-24
  • 打赏
  • 举报
回复
问题 解决了? 用 Nuget 引用System.Data.SQLite.Core 里面的 包 可行? 为什么我试了 却 不可以呢。。。。。 楼主如何解决的
fanzouguo 2014-11-10
  • 打赏
  • 举报
回复
谢谢两位,基本解决问题了,昨天在出差,网不行,结贴慢了。
winnowc 2014-11-08
  • 打赏
  • 举报
回复
System.Data.SQLite.Core就是没有引用其它的,不需要linq和ef就直接用这个core包好了
fanzouguo 2014-11-08
  • 打赏
  • 举报
回复
引用 4 楼 github_22161131 的回复:
[quote=引用 2 楼 fanzouguo 的回复:] [quote=引用 1 楼 github_22161131 的回复:] SQLite官方最新的*******,这里面的System.Data.SQLite.dll是Any CPU的,*******。
------------------------------------------------------------------------ 非常感谢,那想问下,System.Data.SQLite.Core有专门区分64和32吗,还是一样可以支持Any CPU。 [/quote] nuget上的System.Data.SQLite.Core里面打包的就是System.Data.SQLite.dll(和x86/x64两个SQLite.Interop.dll),而System.Data.SQLite里面其实没有东西,而是对core、linq和ef6三个包的依赖。 可以看下官网http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki里面Using Native Library Pre-Loading这一节大概说了下部署的时候需要copy的东西[/quote] ======================================== 忘了说明一下,我不太愿意从nuget里面获取是因为尝试过一下,(忘了当时引的哪个,我是VS2013),默认把Linq和EF都引用进来了,我不想用EF,又没有办法验证手工取消EF会不会对这个版本的SQLITE功能上有什么影响,所以就笨办法,直接在官网去下的单文件的DLL直接引用到项目中,所以遇到了发帖说的问题。
fanzouguo 2014-11-08
  • 打赏
  • 举报
回复
引用 3 楼 winner2050 的回复:
支持 Any CPU 了啊,好消息啊。 如果楼主用旧版区分cpu的,可以统一nuget 引用x64的行了,现在32位的开发机器和32位服务器实在太少了。
是的,就是打算做64位的,但是引用了X64的DLL后遇到问题,所以才发帖请教。
winnowc 2014-11-08
  • 打赏
  • 举报
回复
引用 2 楼 fanzouguo 的回复:
[quote=引用 1 楼 github_22161131 的回复:] SQLite官方最新的*******,这里面的System.Data.SQLite.dll是Any CPU的,*******。
------------------------------------------------------------------------ 非常感谢,那想问下,System.Data.SQLite.Core有专门区分64和32吗,还是一样可以支持Any CPU。 [/quote] nuget上的System.Data.SQLite.Core里面打包的就是System.Data.SQLite.dll(和x86/x64两个SQLite.Interop.dll),而System.Data.SQLite里面其实没有东西,而是对core、linq和ef6三个包的依赖。 可以看下官网http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki里面Using Native Library Pre-Loading这一节大概说了下部署的时候需要copy的东西
winner2050 2014-11-08
  • 打赏
  • 举报
回复
支持 Any CPU 了啊,好消息啊。 如果楼主用旧版区分cpu的,可以统一nuget 引用x64的行了,现在32位的开发机器和32位服务器实在太少了。
fanzouguo 2014-11-08
  • 打赏
  • 举报
回复
引用 1 楼 github_22161131 的回复:
SQLite官方最新的*******,这里面的System.Data.SQLite.dll是Any CPU的,*******。
------------------------------------------------------------------------ 非常感谢,那想问下,System.Data.SQLite.Core有专门区分64和32吗,还是一样可以支持Any CPU。
winnowc 2014-11-07
  • 打赏
  • 举报
回复
SQLite官方最新的ado.net provider是同时支持x86和x64方式的(nuget上的System.Data.SQLite或者System.Data.SQLite.Core),这里面的System.Data.SQLite.dll是Any CPU的,所以你的ABC.DLL也不需要分两种了,一样使用Any CPU方式就能同时支持两种环境了。如果使用上面的nuget包,它会自动在编译的时候copy依赖的两种SQLite.Interop.dll到bin目录。运行时System.Data.SQLite.dll默认会根据环境自动选择合适的SQLite.Interop.dll加载。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧