検索クエリにLucene.Netを使用しているASP.NET MVCサイトを構築しています。 I ここで質問しました ASP.NET MVCアプリケーションでLucene.Netの使用を適切に構成する方法について、最良の方法はmy IndexWriter
をpublic static
として宣言することであると言われました。再利用できます。
SearchControllerの一番上にあるコードは次のとおりです。
public static string IndexLocation = Server.MapPath("~/lucene");
public static Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
public static IndexWriter writer = new IndexWriter(IndexLocation,analyzer);
writer
は静的であるため、IndexLocation
も静的でなければなりません。したがって、コンパイラはServer.MapPath()
に対して次のエラーを表示します。
オブジェクト参照は、非静的フィールド、メソッド、またはプロパティ「System.Web.Mvc.Controller.Server.get」に必要です
Server.MapPath()または静的フィールドから類似したものを使用する方法はありますか?このエラーを修正するにはどうすればよいですか?
HostingEnvironment.MapPath
を試してください。これはstatic
です。
HostingEnvironment.MapPath
がServer.MapPath
と同じ値を返すことの確認については、このSOの質問を参照してください。 Server.MapPathとHostingEnvironment.MapPathの違いは何ですか?
クラスから呼び出すためにこれを試すことができると思います
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
*----------------すみません、静的関数はすでに質問に答えました
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
更新
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
の使用中に例外が発生しました
例の詳細:System.ArgumentException:相対仮想パス「SignatureImages」はここでは許可されていません。 System.Web.VirtualPath.FailIfRelativePath()で
ソリューション(静的Webメソッドでテスト済み)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
作業済み