日期:2014-05-17  浏览次数:21059 次

C#+SQLite.dll 太变态了!求高手解决啊
未能加载文件或程序集“file:///E:/采集器/bin/Debug/System.Data.SQLite.dll”或它的某一个依赖项。试图加载格式不正确的程序。 行 247,位置 5。 E:\采集器\Main.resx 247 5

我二个本本。
都是win7 + 64 + vs2010 环境一样的。

可是 一样的程序。在另一台电脑就可以。在我现在的新本本上就是不行。就是加载sqlite.dll错误 。

而经过加密过后的,在我电脑上又可以运行。但是我是开发的啊,本机调试一定要的。可是现在生成,运行,都不行了。。。。。

上面那狗屁提示,打开Main.resx 中,247行。根本没东西。搜索,整个resx里也没有sqlite.dll的

咋解决啊。。。。 

32,64平台,这破sqlite咋整。求高手给个解决文案啊。
c# sqlite

------解决方案--------------------
另一台机器上也需要安装sqlite
程序目录下需要把System.Data.SQLite.dll拷过去
------解决方案--------------------
我这一个项目也报这个错误,后来换成32位系统好了
------解决方案--------------------
将项目文件整体搬到另一台电脑上生成,然后运行看看,可能是生活的时候嵌入了信息了,所以直接拿过去运行不了。

------解决方案--------------------
DLL和RESX有什么关系啊,.net程序引用DLL后,默认会搜索系统盘放DLL的位置(好像是C:/xx/System32文件夹),如果找不到会搜索当前的域中的路径,就是你exe所在的路径,把SqlLite.Dll和你的程序一起发布就可以了。

调试的时候,打开你的项目,点开引用,找到System.Data.Sqlite的引用,设置属性复制到本地,为True即可正常调试
------解决方案--------------------
"试图加载格式不正确的程序"是因为项目目标平台和dll的目标平台不一致引起的,如果dll不区分X64的版本,用的是Any CPU编译的,那么就不可能出现这样的错误,否则你要先看清使用的dll对应的目标平台,编译项目也必须对用那个平台编译,否则就要有可能出错。
如果你必须要将项目编译为Any CPU,那么对于32位和64位系统就要单独使用不同的dll,但是必须保证那个“Version=1.0.84.0”都是一样的,否则还是要报错。或者设置版本号兼容,够麻烦的。
------解决方案--------------------
我估计是引用路径的问题
------解决方案--------------------
你工程文件中,SQLite dll引用的路径是怎么设置的?查一下新机器是否符合这样的设定。
------解决方案--------------------
引用:
"试图加载格式不正确的程序"是因为项目目标平台和dll的目标平台不一致引起的,如果dll不区分X64的版本,用的是Any CPU编译的,那么就不可能出现这样的错误,否则你要先看清使用的dll对应的目标平台,编译项目也必须对用那个平台编译,否则就要有可能出错。
如果你必须要将项目编译为Any CPU,那么对于32位和64位系统就要单独使用不同的dll,但是必须保证那个“V……


8楼已经回答你了,你需要看一下你的工程编译环境:
如果是x86,那就安装x86版sqlite并引用
如果是x64,那就安装x64版sqlite并引用
------解决方案--------------------
引用:
5楼的兄弟。新本就是把原来的项目全复制过来的。。。生成不了。

6楼的兄弟。生成时提示就是那个。我也不知道和resx有啥关系啊。现在不提示了已经。还是找不到文件

另外。sqlite.dll肯定是在我debug目录下的。复制到本地的。


你用的SQLite是经过强签名的?
------解决方案--------------------
引用:
强名称=true

引用:引用:
5楼的兄弟。新本就是把原来的项目全复制过来的。。。生成不了。

6楼的兄弟。生成时提示就是那个。我也不知道和resx有啥关系啊。现在不提示了已经。还是找不到文件

另外。sqlite.dll肯定是在我debug目录下的。复制到本地的。
……

不要用强签名的SQLite程序集啊……不然你得先把强签名后的dll扔进系统GAC才行
------解决方案--------------------
和强签名无关,所有版本的SQLite的签名肯定是一样的,不一样就说明是盗版的,官方发布的不会使用不同的签名。
另外不签名是不允许注册到全局程序集的,也就是bin目录下面不带dll的使用方法,那个是预先注册到了全局程序集,也就是C:\Windows\assembly下面。至于如何注册到那个位置,方法很简单,直接把dll文件复制进去即可,也可以通过gacutil.exe进行注册,不过两种方法的注册都会预先验证签名的准确性,签名无效就不让注册。命令为:gacutil /if  System.Data.SQLite.dll
我查了下本机曾经安装过的System.Data.SQLite.dll,有一个是Any CPU的,当然也提供了X64的版本,但为了通用性,还是应该选择Any CPU的啊,至于Visual Studio里引用的时候记得去浏览安装目录,找那个dll,别用全局程序集,不一定准确哦。
------解决方案--------------------
补充,想要知道你使用的dll是对应什么平台的,用reflector工具查看dll,点击展开的dll名,能够显示“Platform Target”信息的。
------解决方案--------------------