2013-04-23 58 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文件夹。

相关问题