以前只用VS2008调用过sqlite,今天用VS2010调用sqlite出现了问题,本来想在引用中加载了sqlite的两个动态连接文件后就可以直接调用它的连接对象了。但调用的时候出现了“混合模式程序集是针对....”的错误提示,程序无法运行。
一开始没有用到sqlite的连接,仅仅调用我对连接数据库的一个封装类中的方法,怎么弄都不能运行到我的方法体中去,当时也没注意太多,设置了很多断点,后来就连窗体自带的的方法也不执行了,直到后面脱离封装的内,单独写了一个sqlite的连接,在调用连接的时候就出现了文章开头描述的错误。
仔细看了以下sqlite的版本,初步发现了问题,那就是现有的System.Data.Sqlite这个数据访问provider是针对.NET2.0环境开发(最新的版本是1.0.66.0,2010年4月18日发布的),而目前官方也没有给出最新的.NET4的数据访问支持。
在网上搜索了一下,找到了解决的方法,就是在app.config中多添加一个配置节:startup
< startup useLegacyV2RuntimeActivationPolicy="true"> < supportedRuntime version="v4.0"/> < /startup>
这段配置节的意思是(参考自MSDN,具体地址:http://msdn.microsoft.com/zh-cn/library/bbx34a2h.aspx):
启用 .NET Framework 2.0 版 运行时激活策略,这是通过使用最新支持的运行时加载所有程序集。 注意:由于config配置文件的特性,如果在config配置文件中存在configSections节点,则必须将configSections放在一个,否则会引发异常:配置系统未能初始化
在原来.NET2.0,.NET3.5的时候,由于程序运行环境本质还是.NET2.0,而到了.NET4.0由于整个程序集的版本更新,以前使用.NET2.0所编写的程序集与.NET4.0的程序集继续拧互操作的时候就会出现上面所说的兼容性问题。
通过MSDN,我们可以知道,startup配置节中的useLegacyV2RuntimeActivationPolicy属性是在.NET4.0中新增的,默认是false,表示:
使用默认的 .NET Framework 4 激活策略,该激活策略将加载 .NET Framework 4 通过使用公共语言运行时 (CLR) 版本 4 所创建的程序集,以及 CLR 早期版本通过使用受支持的低于版本 4 的最高 CLR 版本所创建的程序集。 现在如果当程序在.NET4.0环境下要使用.NET2.0及.NET3.5的程序时就必须将useLegacyV2RuntimeActivationPolicy设置为true,同时还要注意,需要在startup配置节的字节中添加supportedRuntime配置节,并指定为“v4.0”,表示使用.NET4.0运行时来运行程序。
转自:http://blog.csdn.net/xingxing513234072/article/details/16980305