Ottenere il percorso assoluto corretto nella libreria utilizzata dal progetto Web

StackOverflow https://stackoverflow.com/questions/602265

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un progetto asp.net mvc che utilizza alcuni metodi di ricerca in una libreria separata. Questa libreria deve conoscere la posizione dei miei file indice lucene.

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

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

Questo legge correttamente il mio lucenePath configurato dal nodo chiave dell'applicazione web.config. Ma come posso ottenere il percorso completo corretto da questo percorso relativo? Path.GetFullPath mi dà un percorso completamente errato.

- Conclusione -
Se vuoi andare al completo, La risposta di tvanfosson è probabilmente per te.
Tuttavia, l'ho tenuto un po 'più cerebrale usando quanto segue:

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

Questo cercherà nell'app.config del chiamante una appkey chiamata " percorso " e combina il suo valore con il percorso del chiamante. TrimStart () si assicura che il file di configurazione possa contenere entrambi un \ iniziale o meno.

È stato utile?

Soluzione

Dato che stai facendo riferimento a questo da una libreria separata, potresti dover saltare un mucchio di cerchi per accedere a HttpServerUtitity o introdurre un accoppiamento con classi difficili da deridere. Potresti prendere in considerazione l'idea di avere un'unica classe di configurazione che carica le proprietà dalla configurazione web che viene iniettata nella tua libreria tramite il costruttore / setter. Per semplificare il test, è possibile definire un'interfaccia che potrebbe essere derisa nei test delle unità e farla implementare. La classe di configurazione potrebbe utilizzare HttpServerUtility per ottenere il percorso assoluto e archiviarlo internamente per essere riutilizzato.

Altri suggerimenti

Server.MapPath(string);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top