System.Data.sqlite and Subsonic 3:VS2008ではうまく機能しますが、VS2010では機能しません

StackOverflow https://stackoverflow.com/questions/6380961

質問

昨年、私はVS2008プロジェクトでSubsonic 3とSQLiteを非常に成功裏に使用し、結果に非常に満足していました。つい最近、私はVS2010プロジェクトでSubsonic 3とSQLiteをセットアップしようとしましたが、新しいSimplerePositoryをインスタンス化しようとすると、内的例外に会いました。

'System.data.sqlite.sqliteFactory'のタイプ初期イザーは例外を投げました

私が夢中にならないようにするために、私はVS2008でまったく同じコードとapp.configファイルを試しましたが、問題ありません。変!

現在、私はSystem.data.sqlite 1.0.73.0(3.7.6.3)のsubsonic 3.0.0.4とx64バージョンのx64バージョンを使用しています(32ビットバージョンも試しましたが)。両方のDLLを参照とセットとして追加しました。ローカルをコピーしてtrueに。

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

  <connectionStrings>
    <add name="myDatabase" connectionString="Data Source=C:\DB\mydatabase.db3" providerName="System.Data.SQLite"/>
  </connectionStrings>

そして私のコードは次のように見えます:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SubSonic.Repository;

namespace SubSonicSqliteTestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var repo = new SimpleRepository("myDatabase", SimpleRepositoryOptions.RunMigrations);
        }
    }
}

何か案は?

役に立ちましたか?

解決

Visual Studio 2010とSQLite 1.0.66でSubsonic 3を使用しています。しかし、あなたがしなければならないことがいくつかあります:

  • アプリケーションはx86(anycpuではない)でなければならないか、64ビットマシンでbadimageformatexceptionを取得します
  • ターゲットフレームワークを「フレームワーク4.0クライアントプロファイル」から「フレームワーク4.0」に変更する必要があります。
  • これをapp.configファイルに追加(または変更する)必要があります。 sqliteがuselegacyv2runtimeactivationpolicyフラグがtrueに設定されていない場合は機能しません

    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
    
  • 私の工場出荷時の初期化コードは次のようになります(バージョンとpublickeytokenが含まれます)。この設定は、セットアップを実行したDev MachineのMachine.Configファイルから取得し、SQLiteをVisual Studio 2010に統合することを選択しました(すべてのプログラム SQLiteフォルダーから)。ファイルは @に配置されています %WinDir%\Microsoft.NET\Framework\<FrameworkVersion>\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, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    
        </DbProviderFactories>
    </system.data>
    
  • 私の接続文字列には、パスのバックスラッシュの代わりにスラッシュが含まれており、バージョンが含まれています

    <connectionStrings>
        <add name="connectionstringname"
                   connectionString="Data Source=c:/temp/mydatabase.db;Version=3;"
                   providerName="System.Data.SQLite"/>
    </connectionStrings>
    

それが役立つことを願っています。

更新:sqliteのx64バージョンを使用しているので、最初のヒントを忘れてください。しかし、私はそれを残します、多分それは他の人に役立つでしょう。

他のヒント

私が正しく覚えていれば、「例外を投げるタイプの初期化」は、通常、タイプの静的コンストラクターの何かが例外を投げたことを意味します。オープニングを試してみたいと思うかもしれません System.Data.SQLite.SQLiteFactory ReflectorまたはDotPeekまたはJustDocompile、またはあなたが好むツールでは、その静的コンストラクター(.CCTOR)が何をしているかを確認します。 VS2010で.NET 4を使用し、VS2008に.NET 2/3を使用してTIを持っていますか?それも問題の一部かもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top