12

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

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

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

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

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

4

7 回答 7

11

通过使用波浪号

value="~/certificate.abc"
于 2013-04-23T11:29:45.167 回答
3

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

value="folder\subfoler"

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

于 2017-03-20T09:01:40.300 回答
1

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

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

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

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

于 2013-04-23T13:20:53.420 回答
1

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

于 2017-08-24T11:33:51.690 回答
0

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

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

或使用

System.Web.HttpContext.Current.Server.MapPath("~/[PARTH_TO_FILE]") '
于 2013-04-23T11:31:13.520 回答
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);
            }
于 2013-04-23T14:35:36.253 回答
0
在要放置日志的文件路径之前使用“../”

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

于 2021-07-19T09:47:23.153 回答