Как указать путь в файле.config относительно файла?

Приложение, которое я использую, интерпретирует файл.NET .config. Я добавил строку, указывающую путь к требуемому сертификату

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

Тем не менее, я обнаружил, что приложение работает только при запуске из точной папки .exe и .config. Если он запускается из другой папки, он терпит неудачу, потому что он ищет сертификат в ../ расширенный относительно рабочего каталога.

Что я должен писать в файле конфигурации, чтобы убедиться, что путь ..\certificate.abc расширен относительно файла конфигурации, а не рабочего каталога?

Я не могу изменить приложение (это не мое), я могу только изменить файл конфигурации.

Ответ 1

Используя тильду

value="~/certificate.abc"

Ответ 2

Вы не можете изменить это, просто изменив конфигурационный файл. Если вы не используете абсолютный путь.

Если вы можете изменить приложение...

Если это приложение asp.net, используйте Server.MapPath. Если это приложение Windows, вам нужно получить каталог исполняемого приложения и объединить его с относительным путем в вашем файле конфигурации.

System.Reflection.Assembly.GetExecutingAssembly().Location предоставит вам путь к файлу.EXE. Затем вы можете вызвать Path.Combine, чтобы объединить ваш относительный путь с контуром приложения.

Ответ 3

Я думаю, что в вашем случае вам нужно установить имя файла. Папка, в которой все файлы, которые вы знаете (если папка может быть использована - установить папку без.. /)

И где вам нужно использовать путь - объединить текущее местоположение приложения (можно получить во время выполнения) и ключ от настроек

или использовать

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

Ответ 4

ваш файл конфигурации может находиться в другом месте, а затем исполняемый файл. как вы исполняете мантион, я понимаю, что это приложение на базе настольных компьютеров, поэтому здесь вы идете так, как можете.

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

Ответ 5

В visual studio 2015 ключевое слово "~" больше не работает. Теперь вы можете использовать:

value="folder\subfoler"

"папка" имеет тот же уровень с файлом.exe

Ответ 6

..\ переходит на уровень папки. Повторяйте столько раз, сколько необходимо, например ..\..\ чтобы попасть в папку с bin.