如何在.config文件中指定相对于文件的路径?

时间:2013-04-23 11:25:58

标签: c# .net app-config

我使用的应用程序解释了.NET .config文件。我添加了一行指定了所需证书的路径

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

但是,我发现该应用仅在从.exe.config所在的确切文件夹运行时才有效。如果从另一个文件夹运行,则会失败,因为它会在../扩展相对于工作目录的位置查找证书。

我应该在配置文件中写什么,以确保相对于配置文件而不是工作目录的..\certificate.abc扩展路径?

我无法更改应用程序(它不是我的),我只能更改配置文件。

7 个答案:

答案 0 :(得分:8)

使用代字号

value="~/certificate.abc"

答案 1 :(得分:1)

您无法通过更改配置文件来更改此设置。除非你使用绝对路径。

如果您可以更改应用程序......

如果这是一个asp.net应用程序,那么使用Server.MapPath。如果它是Windows应用程序,则需要获取正在执行的应用程序的目录,并将其与配置文件中的相对路径相结合。

System.Reflection.Assembly.GetExecutingAssembly().Location将为您提供.EXE文件的路径。然后,您可以调用Path.Combine将您的相对路径与应用程序的路径组合在一起。

答案 2 :(得分:1)

在Visual Studio 2015中,&#34;〜&#34;关键字已不再有效。 您现在可以使用:

value="folder\subfoler"

&#34;夹&#34;与.exe文件具有相同的级别

答案 3 :(得分:1)

..\上升到文件夹级别。根据需要重复多次,例如..\..\转到您的bin文件夹。

答案 4 :(得分:0)

我认为在你的情况下你需要设置文件名。您知道所有文件的文件夹(如果文件夹可以编组 - 设置文件夹没有../)

您需要使用路径的位置 - 将应用程序的当前位置(可以在运行时获取)和来自设置的键组合起来

或使用

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

答案 5 :(得分:0)

你的配置文件可能位于其他位置,然后是执行文件。当你提到执行路径时,我明白这是基于桌面的应用程序,所以在这里你可以做到这一点。

在配置中。

 <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);
            }

答案 6 :(得分:0)

在要放置日志的文件路径之前使用“../”

如果您使用以下代码 ErrorLog 文件夹将在你的 bin\Debug\net5.0 中创建