バージョン1.0.75.0からmsvcr100.dllをstatic linkしたmixed-assemblyなdllが提供されるようになっていました。
1.0.76.0のダウンロードサイトを見ていたら、何かダウンロードできるのが増えていて、確認したらそういうことでした。
これを使えばmsvcr100やらmsvcr90やらのvc++のランタイムは不要になります。
1.0.66.0から1.0.74.0まではsqlite.interop.dllとsystem.data.sqlite.dllとmsvcr100.dll(またはmsvcr90.dll)が必要でしたが、static link かつmixed-assemblyになることで、これらのdllが一個に集約され、system.data.sqlite.dllのみで動くようになります。
ようやく昔と同じ使い勝手に戻りました。これからc#やVBでsqliteを使おうという人には、コーディング以外の部分で悩まされることも少なくなるのではないかと思います。
Archive for the 'sqlite' Category
1.0.66.0から1.0.73.0まで、system.data.sqlite.dllは、.netマネージコードとアンマネージコードの両方が混載しているdllが提供されなくなり、マネージコードのみのdllとアンマネージコードのdllに分割され、さらにVC++のランタイムが動作に必要となるという、環境構築にとっては非常にやっかいな状態が続いていました。
つまり、system.data.sqlite.dllがマネージコードdllで、sqlite.interop.dllがアンマネージコードdll、msvcr100.dllがVC++のランタイム、ということで、この3つのファイルが開発・配布に必要になっていました。
しかしどうやら、開発している人たちもこの問題は認識していたようで、1.0.74.0はマネージコードとアンマネージコードが再び結合されて一つのdllとして提供されるようになりました。いまだにmsvcr100.dllは必要なのですが、これは公開されているソースを元にビルドオプションを先日の当ブログで紹介したように変更することで、ランタイムが不要なようにビルドできます。
ただ、ソースを見るとマネージコード部分はc#で書かれていて、アンマネージコード部分はc++のようです。一つのプロジェクトに複数の言語が使われていた場合、VisualStudioの無料版では機能制限によりビルドできません、たしか。
そして私は無料版しか持ってないので、今後はビルドしなおしたものを提供できそうにないです。
買おうにも、Proなどの有料版は高くてちょっと手が出ないです。
公式の人たちがランタイムが不要なようにビルドしなおしてくれるのを待つしかないですね。
1.0.66.0のお手軽さまで、あと少しのところまで戻ってきています。
ついに完成しました。
「小説を読もう」および「にじファン」の閲覧補助ツールです。
フルバージョンの.net framework4.0が必要です。
windows updateなどから入手できるものは簡易版のclient profileなので、たぶん動作しません。
改めて説明すると、このツールはWEBサーバー兼webクライアントとして動作します。
WEBサーバーとしては、デフォルトでは127.0.0.1の80ポートでブラウザからの接続を待ちうけします。
起動時にオプションを指定することで、他のマシンからの接続を受け付けたり、ポートを変更することもできます。
ブラウザからこのソフトを通じて、「小説を読もう」および「にじファン」に接続し、検索結果を表示します。
その際、作品ごとに個別にタグをつけてローカルDBに保存して管理します。
以降、検索するたびに、DBに保存した情報を参照し、一定基準に満たない作品だった場合は検索結果から除外します。
これで「もう二度と読みたくない」と思ったあんな小説こんな小説をブロックできます。
なお、前バージョン時は32bitソフトでしたが、今回より環境ごとによって32bitになったり64bitになったりします。
切り替わりは自動なので意識する必要はありません。
圧縮ファイル内部にはC#用sqliteライブラリのsystem.data.sqlite.dllと、32bit版と64bit版の二種類のsqlite.interop.dllが同梱されています。
sqlite.interop.dllはc++製ネイティブなので、環境ごとにdllが必要なので二種類です。
またmsvcr100.dllが不要なようにビルドしなおしてあります。ソースにはなんら変更は加えておりません。
注意事項
2011年4月にリリースされたsystem.data.sqlite.dllはsqlite3 ver3.6.23.1を元にしていますが、これはsqlite3 ver3.7.0との相互運用に際してバグが報告されています。下記リンクを参照してください。
http://www.sqlite.org/src/info/51ae9cad317a1
報告されているのは3.7で作成したdbに3.6.23で書き込むとdbが破損するという不具合です。
既にfixedとなっていましたが、逆の現象が2010年4月のsystem.data.sqlite ver 1.0.66.0と、現在最新版のsqlite3 3.7.6を元にしているver 1.0.72.0で再現されました。
1.0.66.0で作成したdbを1.0.72.0で書き込むとdbが破損したような症状になりました。書き込み読み込み共に可能ですが、最適化が失敗するような状態です。しかし1.0.66.0のsystem.data.sqlite.dllに切り替えると最適化が可能で、もちろん書き込み読み込みも可能でした。
1.0.66.0で最適化後は、1.0.72.0のdllに切り替えて最適化も可能だったり、あるいはやっぱりダメだったり、症状はさまざまです。
もちろんこちらで変更したsqlite.interop.dllのせいではないことは確認済みです。
バックアップしていたDBを試してみると、全てダメというわけでもなく、発生条件がよくわかりません。いずれにしろDBが読み込めるという状況には変わりは無いので、最適化できないDBからデータを全て抜き出して新しくDBを再作成する機能を実装しています。
困ったら使ってみてください。
goshin
先日の投稿でも書いたように、新しいsystem.data.sqlite.dllは動作にsqlite.interop.dllとmsvcr100.dllが必要になります。
2010年4月のバージョン以前はsystem.data.sqlite.dllのみか、またはsqlite3.dllとの組み合わせで動きましたが、今後はMircrosoftのランタイムであるmsvcr100.dllも必要になります。
これが非常にうっとうしいですし、そもそもmsvcr100.dllを自分のアプリに同梱して配布していいものなのかどうかも判断がつきません。なのでmsvcr100.dllが不要になるようにsqlite.interop.dllをコンパイルしなおしてみました。
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
ここからsystem.data.sqlite.dllのソースをダウンロードできます。
ダウンロードして解凍すると、VisualStudio2008か2010で使えるプロジェクトファイルが出てきます。
sqlite.interop.2010のプロジェクトのプロパティを開いて、c/c++のコード生成の項から、ランタイムライブラリのオプションで、マルチスレッドDLL(/md)となっているのを、マルチスレッド(/mt)に変更します。
これでビルドすればOKです。
テストをこれから行い、まともに動きそうならmsvcr100.dllが不要なsqlite.interop.dllを公開することにします。
ソースは全く変更せずにビルドオプションをちょっと変えただけなので、特に問題は出なさそうですが、まずはテストをします。
最新版のsystem.data.sqliteの使い勝手があまりにもひどい *追記 1.0.75.0以降は酷くなくなりました
C#, GOSHIN, sqlite, ソフトの説明 No Comments »
GOSHINに使っているsystem.data.sqliteのバージョンがちょっと古かったのでバージョンアップしようとしています。
現在使用中なのは2010年4月にリリースされたもので、ダウンロードするとmanagedonlyなdllか、sqlite3.dllを取り込んだunmanagedなdllのどちらかを利用できます。
これがどっしり安定していて不満も何にもないのでずっと使っていたのですが、古いバージョンをいつまでも使い続けるのはよくないだろうと思って、最新版をダウンロードしてみたのです。
ここからダウンロードできます。
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
zipが無いのはまだギリギリ我慢できるとしても、動作にmsvcr100.dllが必要不可欠であるというのが辛い。
msvcr100.dllはVC++のランタイムで、普通の環境には入ってません。だからソフトの配布時にmsvcr100.dllを同梱しないといけません。
最初はこれが理解できずにひどく苦労しました。実行してもsqlite.interop.dllのエラーしか検知されないので、msvcr100.dllが存在しないことによるエラーだと判明するまでにものすごい手間隙がかかりました。
また、以前はsystem.data.sqlite.dll+sqlite3.dllの組み合わせで動いたのに、最新版はsystem.data.sqlite.dllとsqlite.interop.dllとmsvcr100.dllの三つのファイルが必要になり、容量が700kbほど増えています。
今どき700kbごときの増量は屁の河童ですが、すっきりしないことに変わりはありません。
msvcr100.dllが必要ないようにコンパイルするのはとても簡単なように見えるのですが、本家では全く検討している様子がありません。
ずっとこのまま行くのでしょうか。
今後sqliteをc#で扱うことを考えている人へ。
sqliteをc#から利用するためのdllは、一番有名なのは本家本元のsystem.data.sqliteですが、他にもcsharp-sqliteというものもあります。これもオープンソースで開発されているので開発が急に止まるようなことはないと思います。
また、vectorでC#用SQLite3インタフェースDLL(SQLite3cs.dll)というものが公開されてました。
ライセンスが不明なので使いにくいですが。
敢えてsystem.data.sqliteを使おうとするなら、参照にsystem.data.sqliteを追加してアプリケーションをビルドした後に、exeファイルと同じフォルダにsqlite.interop.dllとmsvcr100.dllを置いてください。msvcr100.dllは環境によってはインストール済みのこともあるので、エラーが出てからでも遅くはありませんが。