【问题标题】:How to specify path in .config file relative to the file?如何在 .config 文件中指定相对于文件的路径?
【发布时间】:2013-04-16 14:19:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 如果这只是您添加的一个键,那么您将在读取键值后在代码中执行此操作。

标签: c# .net app-config


【解决方案1】:
在要放置日志的文件路径之前使用“../”

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

【讨论】:

    【解决方案2】:

    ..\ 提升文件夹级别。根据需要重复多次,例如..\..\ 进入您的 bin 文件夹。

    【讨论】:

      【解决方案3】:

      在 Visual Studio 2015 中,“~”关键字不再起作用。 您现在可以使用:

      value="folder\subfoler"
      

      “文件夹”与.exe文件同级

      【讨论】:

        【解决方案4】:

        您的配置文件可能位于执行文件之外的其他位置。当你提到执行路径时,我知道这是基于桌面的应用程序,所以你可以这样做。

        在配置中。

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

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

            以及您需要使用路径的地方 - 结合应用程序的当前位置(可以在运行时获取)和设置中的密钥

            或使用

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

            【讨论】:

            • 您不需要通过编辑您的答案来复制其他人的答案。
            【解决方案7】:

            使用波浪号

            value="~/certificate.abc"
            

            【讨论】:

            • 您是从哪里了解到波浪号的?我找不到这个记录。
            • @ColonelPanic ~ 代表 *nix OS 中的主文件夹。这确实没有正确记录。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-03-31
            • 1970-01-01
            • 1970-01-01
            • 2014-08-23
            • 2014-03-21
            • 1970-01-01
            • 2015-02-17
            相关资源
            最近更新 更多