Obtenir le chemin absolu correct dans la bibliothèque utilisée par le projet Web

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai un projet asp.net mvc qui utilise des méthodes de recherche dans une bibliothèque séparée. Cette bibliothèque doit connaître l’emplacement de mes fichiers d’index lucene.

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

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

Ceci lit correctement lucenePath configuré à partir du nœud de clé d'application de web.config. Mais comment puis-je obtenir le chemin complet correct à partir de ce chemin relatif? Path.GetFullPath me donne un chemin complètement incorrect.

- Conclusion -
Si vous voulez aller au maximum, La réponse de tvanfosson est probablement pour vous.
Cependant, je l'ai gardé un peu plus mort cérébrale en utilisant ce qui suit:

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

Ceci cherchera dans l'app.config de l'appelant une appkey appelée "chemin". et combinez sa valeur au chemin de l'appelant. TrimStart () s'assure que le fichier de configuration peut contenir un \ ou non.

Était-ce utile?

La solution

Étant donné que vous faites référence à cela depuis une bibliothèque distincte, vous devrez peut-être parcourir plusieurs étapes pour accéder à HttpServerUtitity ou introduire un couplage avec des classes difficiles à reproduire. Vous voudrez peut-être envisager de créer une seule classe de configuration qui charge les propriétés de la configuration Web injectée dans votre bibliothèque par le biais du constructeur / configurateur. Pour faciliter les tests, vous pouvez définir une interface qui pourrait être simulée dans vos tests unitaires et la faire mettre en œuvre. La classe de configuration pourrait utiliser HttpServerUtility pour obtenir le chemin absolu et le stocker en interne pour être réutilisé.

Autres conseils

Server.MapPath(string);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top