我有一个项目,其中我想使用一些.NET 4.0功能,但核心要求是我可以使用针对2.X编译的System.Data.SQLite框架.我看到提到这是可能的,例如这里接受的答案,但我不知道如何实际实现这一点.
当我在参考2.X程序集时尝试运行我的4.0项目时,我得到:
混合模式程序集是针对运行时的版本"v2.0.50727"构建的,如果没有其他配置信息,则无法在4.0运行时加载.
什么"附加配置"是必要的?
我有一个WPF应用程序运行VS2010 .Net3.5使用Nhibernate与FluentNHibernate + SQLite,一切正常.
现在我想改为使用.Net4,但这已经变成了一种比我想象的更痛苦的经历..在设置连接时我这样做:
var cfg = Fluently.Configure().
Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("MyDb.db")).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>());
_sessionFactory = cfg.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
BuildSessionFactory()调用抛出FluentConfigurationException:
创建SessionFactory时使用了无效或不完整的配置.检查PotentialReasons集合和InnerException以获取更多详细信息.
内部异常为我们提供了更多信息:
无法从NHibernate.Driver.SQLite20Driver,NHibernate,Version = 2.1.2.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4创建驱动程序.
而且还有InnerException:
无法找到程序集System.Data.SQLite中的IDbCommand和IDbConnection实现.确保程序集System.Data.SQLite位于应用程序目录或全局程序集缓存中.如果程序集位于GAC中,请使用应用程序配置文件中的元素指定程序集的全名.
现在 - 对我来说听起来似乎没找到System.Data.SQLite.dll,但我无法理解这一点.引用的所有地方我都有"复制本地",我已经验证它是在使用SQLite的项目的每个构建文件夹中.我还手动将它复制到解决方案的每个Debug文件夹 - 没有运气.
笔记:
在@ devio的回答后,我尝试添加对SQLite dll的引用.这没有改变任何东西,但我希望我做对了..这是我添加到app.config文件的根节点的内容:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="System.Data.SQLite" fullName="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
有没有人使用Fluent成功使用.Net4和SQLite?救命!我迷路了...