2012年5月3日木曜日

Visual Studio 2010 express に SQLite を統合する

すばらしく時間がかかったがようやく設定が終わったため、メモ。おそらくこんなに苦労したのはx64環境だからで、x32なら普通にできる可能性大。

1.SQLite ADO.NET Providerのダウンロード/インストール
最近のリリースにはなぜかProviderが入っていないので、昔のバージョン(1.0.66)をまずダウンロードする(公式サイトのリンクが切れているのでsource forgeから落とす)。
ver 1.0.66

2.最新版のSystem.Data.SQLiteのダウンロード/インストール
x32(x86)とx64両方落とす必要がある点に注意する(パソコンがx32ならx64はいらないかもしれない)。ダウンロードはこちらから。Setup for xxx となっているものを、それぞれダウンロードする。

※ダウンロードするのはbundleとついているほう。System.Data.SQLiteにはネイティブのコードが含まれており、ネイティブ分をマージした版(bundle)か切り出した版(Interop.dllに分かれている?)か選ぶことができる。
VisualStudioから使う際、分割版はどうもうまくいかないのでbundleで行う。

インストール時、スタートアップにメニューを追加するかどうかの後に、インストール後の作業として global assembly へ追加するかどうかなどのチェックボックスを入れる画面になる。ここで、x86のインストール時は全てチェックを入れておき、x64のときは初期提案のままとした。
これに意味があるかはわからないが、Visual Studio 2010 Expressがそもそもx86で稼動しているので、x86側の設定を優先するようにした。


3.最新版dllの移行
後は引越し作業が待っている。Providerをインストールしたフォルダ(C:\Program Files (x86)\SQLite.NET)のbinを、最新版のx86 System.Data.SQLiteのbinで上書きする。そして、bin/x64のフォルダを同じく最新版のx64 System.Data.SQLiteのbinで上書きする。
※念のためbinフォルダのバックアップを取っておくことを推奨。

これで作業は完了。Visual Studioを起動すればサーバーエクスプローラーからSQLiteを追加できるようになっているはず。
ただ、データソースの追加としたときにConnectionStringの設定画面しか出てこないような場合は設定がおかしい。ここから先は色々試したので何が正解かわからないが、とりあえず以下を試せば何とかなると思われる。

 3.1 デザイナのリフレッシュ?
 C:\Program Files (x86)\SQLite.NET\bin\Designer内のSQLite.Designer.dllをx86側の最新版に置き換え、install.exeを実行する。
途中System.Data.SQLite.dllの場所を何度も聞かれるが、恐らく永久に聞いてくるので一回入力したらキャンセルする。


 3.2 machine.configのDbProviderFactoriesセクションへの接続文字列の追加
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Configにあるmachine.configにSqliteの接続文字列を追加する(test.exe.configの設定をコピーすればよい)。x64の場合、64bit版.NET Frameworkの側にも設定を追加しないといけない点に注意。


3.2 /resetskippkgs オプションでVisual Studioを起動する
 パッケージのキャッシュが残ることがあるらしいので、これでリフレッシュ。

逆に、machine.configへのDataProviderFactoryの追加・C:\Windows\assemblyへの追加を試みる、といったことは意味がなかった。そして、1.0.66のインストールだけではうまく動かないことも確認済み。やはり最新版をインストールして対応させる必要がある。


これでうまくいく・・・と思う。


なお、これはあくまでSQLiteを.NETから使えるようにしただけなので、実際にテーブルを作ったりデータを入れたりという操作は別途行う必要がある。
サーバーエクスプローラーが使えればそこからでも可能だが、他のツールとしてはSQLiteAdminが有名なようだ。


4.プロジェクトでの使用
System.Data.SQLite/System.Data.SQLite.Linqをコピーしてきて参照設定をし、使う。
コピーしてくるのが面倒、という場合はまずインストールフォルダへ参照設定を行い、その後参照設定のプロパティでローカルコピーをTrueにする。
参照は64bitと32bitどちらなの?というのはPCの環境に合わせるのが吉か。少なくとも、NUnitで動かす際はPC環境とあったdllに参照を通していないと例外が発生した(x86.exeの方で動かせば動くかもしれないが)。
エンティティデータモデルでもきちんと使うことが可能。


参考サイト

SQLite on Visual Studio 2010 Setup Instructions

0 件のコメント:

コメントを投稿