在Web项目使用的库中获取正确的绝对路径

时间:2009-03-02 13:01:11

标签: c# absolute-path

我有一个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()确保配置文件都包含前导\或不包含。

2 个答案:

答案 0 :(得分:1)

Server.MapPath(string);

答案 1 :(得分:0)

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