Ответ 1
Используя тильду
value="~/certificate.abc"
Приложение, которое я использую, интерпретирует файл.NET .config
. Я добавил строку, указывающую путь к требуемому сертификату
<add key="Certificate" value="..\certificate.abc"/>
Тем не менее, я обнаружил, что приложение работает только при запуске из точной папки .exe
и .config
. Если он запускается из другой папки, он терпит неудачу, потому что он ищет сертификат в ../
расширенный относительно рабочего каталога.
Что я должен писать в файле конфигурации, чтобы убедиться, что путь ..\certificate.abc
расширен относительно файла конфигурации, а не рабочего каталога?
Я не могу изменить приложение (это не мое), я могу только изменить файл конфигурации.
Используя тильду
value="~/certificate.abc"
Вы не можете изменить это, просто изменив конфигурационный файл. Если вы не используете абсолютный путь.
Если вы можете изменить приложение...
Если это приложение asp.net, используйте Server.MapPath
. Если это приложение Windows, вам нужно получить каталог исполняемого приложения и объединить его с относительным путем в вашем файле конфигурации.
System.Reflection.Assembly.GetExecutingAssembly().Location
предоставит вам путь к файлу.EXE. Затем вы можете вызвать Path.Combine, чтобы объединить ваш относительный путь с контуром приложения.
Я думаю, что в вашем случае вам нужно установить имя файла. Папка, в которой все файлы, которые вы знаете (если папка может быть использована - установить папку без.. /)
И где вам нужно использовать путь - объединить текущее местоположение приложения (можно получить во время выполнения) и ключ от настроек
или использовать
System.Web.HttpContext.Current.Server.MapPath("~/[PARTH_TO_FILE]") '
ваш файл конфигурации может находиться в другом месте, а затем исполняемый файл. как вы исполняете мантион, я понимаю, что это приложение на базе настольных компьютеров, поэтому здесь вы идете так, как можете.
в Config.
<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);
}
В visual studio 2015 ключевое слово "~" больше не работает. Теперь вы можете использовать:
value="folder\subfoler"
"папка" имеет тот же уровень с файлом.exe
..\
переходит на уровень папки. Повторяйте столько раз, сколько необходимо, например ..\..\
чтобы попасть в папку с bin.