中程度の信頼環境でLucene.NET 2.3.2 を実行するにはどうすればよいですか? GoDaddyはこのままでは気に入りません。
3 に答える
私は最近これに苦労し、これを解決策で更新したいと考えました。必要に応じて変更できるように、最新のコードを取得して自分でビルドしました。SupportClass.cs ファイルの 481 行目以降には、アンマネージ コードを使用してファイル バッファーがフラッシュされたことを確認するコードがあります。
if (OS.IsWindows)
{
if (!FlushFileBuffers(fileStream.Handle))
throw new System.IO.IOException();
}
else if (OS.IsUnix)
{
if (fsync(fileStream.Handle) != IntPtr.Zero)
throw new System.IO.IOException();
}
else
{
throw new NotImplementedException();
}
これらの行をコメントアウトしてライブラリを再構築したところ、中程度の信頼で実行できました。GoDaddy にデプロイされた簡単なテスト アプリを作成するだけでなく、中程度の信頼でローカルで実行しました。これらの行を削除することの意味がわかりません。このブロックに先行する呼び出しの動作を複製しているように見えますがfileStream.Flush()
、よくわかりません。
それはうまくいくはずです。Lucene.NETは、コミット788091および788092で中程度の信頼環境と互換性があり、2.3.2 リリースに組み込まれました。これは、お気に入りのSubversionクライアントで2.3.2 タグの履歴を調べることで確認できます。
この質問を lucene ユーザー グループ内に投稿したばかりで、以下を使用することをお勧めします:-
public static void Sync(System.IO.FileStream fileStream)
{
if (fileStream == null)
throw new ArgumentNullException("fileStream");
//Will only compile with .net 4.0
fileStream.Flush(true);
}
ユーザーグループの電子メールからの引用:-
ただし、当時、Lucene.NET は .NET 2.0 (IIRC) 上に構築されており、すべてがディスクにフラッシュされることを保証するために使用された Flush メソッドのオーバーロードにアクセスできませんでした。
http://web.archiveorange.com/archive/v/3k9XU33O4yJyW15fWfMd#MhNDlmKgnUj5fOj
現在 .NET 4.0 で作業しているため、SupportClass.cs の上記のコードを置き換えることができるはずです。