1

我有一个 asp.net mvc 项目,它在单独的库中使用一些搜索方法。这个库需要知道我的 lucene 索引文件的位置。

    private static string lucenePath = ConfigurationManager.AppSettings["lucenePath"];

    public static ColorList SearchColors(Query query) {
        return new ColorList(
            new IndexSearcher(Path.GetFullPath(lucenePath)),
            query);
    }

这会从 web.config 的应用程序密钥节点正确读取我配置的 lucenePath。但是我怎样才能从这个相对路径中得到正确的完整路径呢?Path.GetFullPath 给了我一个完全不正确的路径。

--结论--
如果您想全力以赴,tvanfosson的答案可能适合您。
但是,我通过使用以下方法使其脑死亡更多:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
    ConfigurationManager.AppSettings["luceneIndex"].TrimStart('\\'));

这将在调用者的 app.config 中查找名为“path”的 appkey,并将其值与调用者的路径结合起来。TrimStart() 确保配置文件都可以包含前导 \ 或不包含。

4

2 回答 2

1
Server.MapPath(string);
于 2009-03-02T13:02:39.343 回答
0

由于您是从一个单独的库中引用它,因此您可能必须跳过一堆圈才能访问 HttpServerUtitity 或引入一些与难以模拟的类的耦合。您可能需要考虑使用一个配置类,该类从 Web 配置中加载属性,这些属性通过构造函数/设置器注入到您的库中。为了更容易进行测试,您可以定义一个可以在单元测试中模拟的接口并让它实现它。配置类可以使用 HttpServerUtility 获取绝对路径并将其存储在内部以供重用。

于 2009-03-02T13:11:13.177 回答