2008-10-11 54 views
2

我在共享主机上的ASP.NET应用程序中使用Lucene.Net。得到如下所示的堆栈跟踪。什么是工作?Lucene.Net在我的主机上失败,因为它调用GetTempPath()。什么是工作?

[抛出:SecurityException:请求类型的权限 'System.Security.Permissions.EnvironmentPermission,mscorlib程序,版本= 2.0.0.0,文化=中性公钥= b77a5c561934e089' 失败] System.Security.CodeAccessSecurityEngine.Check(对象需求,StackCrawlMark & stackMark,布尔isPermSet)+0 System.Security.CodeAccessPermission.Demand()+59 System.IO.Path.GetTempPath()+54 Lucene.Net.Store.FSDirectory..cctor()+ 73

回答

2

这是我自己的问题的答案。解决的办法是修改Lucene.Net.Store.FSDirectory,注释掉这个空着的线路:

// Comments out by Corey Trager, Oct 2008 to workaround permission restrictions at shared host. This is not used. 
//  public static readonly System.String LOCK_DIR = SupportClass.AppSettings.Get("Lucene.Net.lockDir", System.IO.Path.GetTempPath()); 

有后一个更安全权限的障碍,而这里的是解决办法了。我不明白为什么一种获取目录中文件名称的方法会被阻止,另一种方式不会被阻止。

public override System.String[] List() 
    { 

/* Changes by Corey Trager, Oct 2008, to workaround permission restrictions at shared host */ 
      System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(directory.FullName); 
      System.IO.FileInfo[] files = dir.GetFiles(); 
      string[] list = new string[files.Length]; 
      for (int i = 0; i < files.Length; i++) 
      { 
       list[i] = files[i].Name; 
      } 
      return list; 
/* end of changes */ 

//   System.String[] files = SupportClass.FileSupport.GetLuceneIndexFiles(directory.FullName, IndexFileNameFilter.GetFilter()); 
//   for (int i = 0; i < files.Length; i++) 
//   { 
//    System.IO.FileInfo fi = new System.IO.FileInfo(files[i]); 
//    files[i] = fi.Name; 
//   } 
//   return files; 
     } 
相关问题