1

誰かがこの問題を解決するのを手伝ってくれませんか..私はグーグルした後に救いのことを試みましたが、それでも運がありません...

このエラーは、プロジェクトでフィクスチャを実行しているときに発生します。

NHibernate.HibernateException:NHibernate.Driver.SQLite20Driverからドライバーを作成できませんでした。System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。System.ArgumentException:要求された.NetFrameworkデータプロバイダーが見つかりません。インストールされていない可能性があります

これがスタックトレースです

at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
    at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings)
    at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings)
    at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties)
    at NHibernate.Cfg.Configuration.BuildSettings()
    at NHibernate.Cfg.Configuration.BuildSessionFactory()
    at MyApp.Common.Testing.UnitOfWorkTestContext.NHibernateUnitOfWorkTestContext.get_SessionFactory() in UnitOfWorkTestContext.cs: line 199
    at MyApp.Common.Testing.UnitOfWorkTestContext.NHibernateUnitOfWorkTestContext.IntialiseContainerAndUowFactory() in UnitOfWorkTestContext.cs: line 243
    at MyApp.Common.Testing.DatabaseFixture.OneTimeSetup() in DataBaseFixture.cs: line 66
    --TargetInvocationException
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, ref Boolean canBeCached, ref RuntimeMethodHandleInternal ctor, ref Boolean bNeedSecurityCheck)
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
    at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type)
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
    --ArgumentException
    at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
    at NHibernate.Driver.ReflectionBasedDriver..ctor(String providerInvariantName, String driverAssemblyName, String connectionTypeName, String commandTypeName)
    at NHibernate.Driver.SQLite20Driver..ctor()

テスト設定を変更し、パッケージマネージャーコンソールを介して必要なSQL liteパッケージをロードすることで、問題を解決しようとしました。64ビットシステムを実行しています。何が問題になるのかを理解するのに役立つ体はありますか?

助けてください、ありがとう

4

2 に答える 2

2

ネイティブ SqLite dll はコンパイル パスまたはグローバル アセンブリ キャッシュにありますか?

ネイティブ SqLite.dll の 64 ビット バージョンはありますか (SqLite dll にはアンマネージ コードが含まれており、プロジェクト ビルドと同じ (64/32) である必要があります)。

プロジェクトのビルドを 32 ビットに強制すると、機能しますか?

于 2013-02-13T13:29:39.467 に答える
1

OK、アップグレードのたびにこの問題を修正して再修正するのにうんざりしています。ここに書き留めて、今後のトラブルシューティングを節約したいと考えています。

NHibernate 3.3.3.4000を使用しています

SqlLite 3.6.23.1を使用していますが、dll ファイルのプロパティのバージョンは1.0.66.0と表示されています

  1. 単体テスト プロジェクトのプラットフォーム ターゲットを任意の CPU にします (アーキテクチャを指定する必要があると言う人もいますが、そうではないことがわかりました)。
  2. プロジェクトで System.Data.SQLite.dll を参照する
  3. プロジェクトでコンパニオン System.Data.SQLLite.Linq.dll を参照します (System.Data.SQLite.dll に付属している必要があります)。この dll が NHibernate に必要かどうかはわかりません。

私の app.config には、system.data セクションが必要です。

<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>

インメモリ DB を使用しており、接続文字列 (fluentnhibernate のすべてを除く) は次のようになります。

Data Source=:memory:;Version=3;New=True;Pooling=True;Max Pool Size=1;
于 2014-03-30T18:41:14.480 に答える