我使用的应用程序解释了.NET .config
文件。我添加了一行指定了所需证书的路径
<add key="Certificate" value="..\certificate.abc"/>
但是,我发现该应用仅在从.exe
和.config
所在的确切文件夹运行时才有效。如果从另一个文件夹运行,则会失败,因为它会在../
扩展相对于工作目录的位置查找证书。
我应该在配置文件中写什么,以确保相对于配置文件而不是工作目录的..\certificate.abc
扩展路径?
我无法更改应用程序(它不是我的),我只能更改配置文件。
答案 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 中创建