2013-04-23 11 views
7

Eine App, die ich benutze, interpretiert eine .NET .config Datei. Ich habe eine Linie, die den Weg zu einem Zertifikat Angabe muss esWie wird der Pfad in der .config-Datei relativ zur Datei angegeben?

<add key="Certificate" value="..\certificate.abc"/> 

Allerdings fand ich nur die App funktioniert, wenn sie von der genauen Ordner aus seiner .exe und .config wohnen. Wenn es aus einem anderen Ordner ausgeführt wird, schlägt es fehl, da es das Zertifikat unter ../ erweitert relativ zu dem Arbeitsverzeichnis sucht.

Was soll ich in die Konfigurationsdatei schreiben, um sicherzustellen, dass der Pfad ..\certificate.abc erweitert relativ zur Konfigurationsdatei ist eher das Arbeitsverzeichnis?

Ich kann die App nicht ändern (es gehört mir nicht), ich kann nur die Konfigurationsdatei ändern.

+2

Wenn dies nur ein Schlüssel ist, den Sie hinzugefügt haben, dann würden Sie das in Code tun, sobald Sie den Schlüsselwert gelesen haben. –

Antwort

5

Durch die Verwendung der Tilde

value="~/certificate.abc" 
+1

Wo hast du von der Tilde gelernt? Ich kann das nicht dokumentiert finden. –

0

ich in Ihrem Fall denken, müssen Sie setzen Dateinamen ein. Ordner, in dem alle Dateien, die Sie kennen (wenn Ordner canged werden können - Set Ordner ohne ../)

Und wo Sie verwenden Pfad benötigen - kombinieren aktuellen Standort der Anwendung (kann im laufenden Betrieb bekommen werden) und Schlüssel von Einstellungen

oder verwenden

System.Web.HttpContext.Current.Server.MapPath("~/[PARTH_TO_FILE]") ' 
+0

Sie müssen die Antworten anderer Benutzer nicht kopieren, indem Sie Ihre Antworten bearbeiten. – SpaceApple

1

Sie nicht diese durch Änderung der Konfigurationsdatei nur ändern können. Es sei denn, Sie verwenden einen absoluten Pfad.

Wenn Sie die Anwendung ändern können ...

Wenn dies eine asp.net-Anwendung ist, dann Server.MapPath verwenden. Wenn es sich um eine Windows-Anwendung handelt, müssen Sie das Verzeichnis der ausführenden Anwendung abrufen und dieses mit dem relativen Pfad in Ihrer Konfigurationsdatei kombinieren.

System.Reflection.Assembly.GetExecutingAssembly().Location gibt Ihnen den Pfad zur EXE-Datei. Sie können dann Path.Combine aufrufen, um Ihren relativen Pfad mit dem Pfad der Anwendung zu kombinieren.

1

Sie Konfigurationsdatei kann auf anderen Speicherort als die ausführende Datei liegen. Wie Sie Mantrationsausführungsweg ich verstehe, ist dies die Desktop-basierte Anwendung, so dass Sie hier gehen, was Sie so tun können.

in Konfig.

<setting name="FilePath" serializeAs="String"> 
     <value>AppPath\MyFile.abc</value> 
    </setting> 

und dies zu retrive.

var path = System.Configuration.ConfigurationManager.AppSettings["FilePath"]; 

      if (path !=null && path.Contains("AppPath")) 
      { 

       var filepath = System.IO.Path.Combine(
        System.Reflection.Assembly.GetExecutingAssembly().Location, 
        path.Replace("AppPath", string.Empty).ToString()); 

       Console.WriteLine(filepath); 
      } 
0

In Visual Studio 2015 hat das Schlüsselwort "~" nicht mehr funktioniert. Sie können nun:

value="folder\subfoler" 

„Ordner“ hat die gleiche Ebene mit Exe-Datei

0

..\ eine Ordnerebene nach oben geht. Wiederholen Sie dies so oft wie nötig, z. ..\..\, um zu Ihrem bin-Ordner zu gelangen.