2009-12-03 73 views

回答

1

它应该工作。 Lucene.NET was made compatible与中等信任环境中的提交788091788092,进入2.3.2版本。您可以通过使用您最喜欢的Subversion客户端查看2.3.2 tag的历史来验证此情况。

+0

看看这:http://sailens.com/details.aspx?item=2&q=love 看起来不像它已被修复。 – Prabhu 2009-12-04 02:18:45

1

我刚刚为此付出了努力,并希望通过我得到的解决方案进行更新。我拉下了最新的代码并自己构建,以便在需要时进行更改。在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()调用的行为,但我不确定。

+0

我也有同样的问题,你看到'注释'代码后出现任何问题吗? – Rippo 2011-05-01 10:59:54

+0

已添加下面的附加答案... – Rippo 2011-05-01 15:55:16

0

我刚才已经发布了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)构建的 ,并且没有 可以访问 的冲刷方法,该冲洗方法曾被用于 保证e verything被刷新到磁盘 :

http://web.archiveorange.com/archive/v/3k9XU33O4yJyW15fWfMd#MhNDlmKgnUj5fOj

既然你现在有工作在.NET 4.0中, 你应该能够取代 上面的代码中SupportClass.cs