gpt4 book ai didi

nhibernate - 带有NHibernate的System.Data.SQLite BadImageFormatException,在独立时可以正常工作

转载 作者:行者123 更新时间:2023-12-03 17:55:16 24 4
gpt4 key购买 nike

我试图将NHibernate与SQLite结合使用,
.NET 4和32位的版本= 1.0.74.0。
我使用64位WIN7,但以x86模式构建应用程序
(VS2010 Express中的默认值)。

当我使用相同的SQLite作为独立应用程序时,它可以正常工作,但是当
我尝试将其与NHibernate一起使用,它会抛出BadImageFormatExcepion

我调试了一下NHibernate,并且在以下语句中抛出了异常

System.Type.GetType("System.Data.SQLite.SQLiteConnection, System.Data.SQLite");


有人知道解决方案吗?
是因为我在VS Express中使用默认模式吗?
我是否需要使用其他方法指定平台?
尝试为sqlite下载其他dll吗?

我检查了一些其他答案,所以我得到的最好
将其添加到我的app.config中:

  <system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
</DbProviderFactories>
</system.data>



<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

最佳答案

如果VS express不允许您选择平台,则可以尝试在.csproj文件中手动进行设置

<PlatformTarget>x86</PlatformTarget>


构建应用后,请确保:


根据您放置在PlatformTarget中的内容(使用Windows Task Manager或Process Explorer)将其作为32位或64位应用程序执行
正确版本的SQLite.Interop.dll被复制到您拥有exe的文件夹中(此dll依赖于平台,因此您需要复制与EXE平台对应的版本)
已安装相应版本的Visual C ++ 2010 SP1可再发行组件包


也可以尝试从配置中删除 useLegacyV2RuntimeActivationPolicy

BadImageFormatException文档:


... DLL或可执行文件作为64位程序集加载,但包含
32位功能或资源。例如,它依赖于COM互操作或
调用32位动态链接库中的方法。 ...要解决此异常,请将项目的“平台”目标属性设置为x86(而不是x64或AnyCPU)并重新编译。

关于nhibernate - 带有NHibernate的System.Data.SQLite BadImageFormatException,在独立时可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com