私は別のライブラリでいくつかの検索メソッドを使用するasp.net mvcプロジェクトを持っています。 このライブラリは、私のluceneインデックスファイルの場所を知る必要があります。Webプロジェクトで使用されているライブラリの正しい絶対パスを取得する
private static string lucenePath = ConfigurationManager.AppSettings["lucenePath"];
public static ColorList SearchColors(Query query) {
return new ColorList(
new IndexSearcher(Path.GetFullPath(lucenePath)),
query);
}
これは、設定されたlucenePathをweb.configのアプリケーションキーノードから正しく読み取ります。 しかし、この相対パスから正しいフルパスを取得するにはどうすればよいですか? Path.GetFullPathは私に完全に間違ったパスを与えます。
--Conclusion--
あなたは完全なアウトに行きたい場合は、tvanfossonの答えはあなたのためにおそらくあります。
私は、しかし、次を使用して、もう少し脳が死んで、それを守っ:
Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
ConfigurationManager.AppSettings["luceneIndex"].TrimStart('\\'));
これは、「パス」と呼ばれるAPPKEYのために、発信者のapp.configをで見て、呼び出し側のパスにその値を結合します。 TrimStart()は、設定ファイルに先頭に\が含まれているかどうかを確認します。
依存関係を完全に削除する方法はありませんHttpServerUtilityについてこのライブラリは、非Webアプリケーションからも消耗しているはずです...スタンドアロンアプリケーションにsystem.web libを含めるのは気が気です。ない? –
確かに、インターフェイスを実装する構成クラスの2つのバージョンを実装してください。 Webサイトから実行されているものはWebコード内にあり、HttpServerUtilityを使用してパスを検索します。あなたのスタンドアロンアプリから実行しているものは、現在実行中のアセンブリを使って実行可能ファイルのパスを取得できます。 – tvanfosson
どちらも、コードをDRYに保つために(WebConfigurationManagerではなくConfigurationManagerを使用して)ほとんどのロジックを実装する共通基本クラスから派生することができます。 – tvanfosson