2013-04-23 99 views
7

的應用程序,我用一個解釋.NET .config文件。我加了一行指定路徑的證書,它需要如何在.config文件中指定相對於該文件的路徑?

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

然而,我發現從它的.exe.config所在的確切文件夾中運行時,應用程序纔有效。如果從另一個文件夾中運行,它失敗,因爲它看起來在../擴大相對於工作目錄證書。

我應該在配置文件中寫什麼,以確保路徑是..\certificate.abc擴展相對於配置文件而不是工作目錄?

我不能改變應用程序(它不是我),我只能改變配置文件。

+2

如果這只是你添加的一個關鍵,那麼一旦你閱讀了關鍵值,你就可以在代碼中做到這一點。 – 2013-04-23 11:28:43

回答

5

通過使用波浪

value="~/certificate.abc" 
+1

你從哪裏瞭解代字號?我無法找到這個記錄。 – 2013-04-23 13:23:35

0

我覺得你的情況,你需要設置文件名。文件夾,你知道所有文件(如果文件夾可以canged - 沒有../設置文件夾)

而且,你需要使用路徑 - 從設置組合應用程序的當前位置(可在運行時獲得)和密鑰

或使用

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

你不需要通過編輯你的答案來複制別人的答案。 – SpaceApple 2013-04-23 11:35:08

1

只能通過更改配置文件才能更改此設置。除非你使用絕對路徑。

如果你可以改變應用程序...

如果這是一個asp.net應用程序,然後使用Server.MapPath。如果它是Windows應用程序,則需要獲取正在執行的應用程序的目錄,並將其與您的配置文件中的相對路徑相結合。

System.Reflection.Assembly.GetExecutingAssembly().Location會給你的路徑.EXE文件。然後,您可以撥打Path.Combine將您的相對路徑與應用程序的路徑結合起來。

1

您的配置文件可能位於其他位置,然後執行文件。當你正在執行的路徑我明白這是基於桌面的應用程序,所以在這裏你去你可以做這樣的事情。

在配置

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

並回顧一下。

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

在visual studio 2015中,「〜」關鍵字不再有效。 現在,您可以使用:

value="folder\subfoler" 

「文件夾」與.exe文件

0

..\上升的文件夾級別相同的水平。根據需要重複多次,例如..\..\到達您的bin文件夾。

相關問題