[英]Lucene.NET in medium trust
我剛剛為此苦苦掙扎,並想用我能使用的解決方案來更新它。 我下載了最新代碼並自己構建了它,以便可以根據需要進行更改。 在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用戶組中發布了這個問題,建議您使用以下內容:
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中替換以上代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.