С# установить appdata или любой специальный путь к папке в файле конфигурации приложения

Я пытался найти способ использовать путь к appdata в качестве моего окружения.currentdrectory, что означает, что я хочу запустить приложение С# из папки appdata, и в моем проекте я всегда использовал environment.currentdirectory.

Я не смог найти способ установить путь к данным приложения в конфигурации приложения, а затем заменить environment.curentdirectory на путь к данным приложения...

PS:.

1) Я хочу установить путь к данным моей программы как appdata

2) мой код проекта настроен на использование environment.currentdirectory

3) Я не хочу заменять environment.currentdirectory, перебирая каждую строку за строкой.

Целевая платформа .Net 4


person user10485400    schedule 07.01.2019    source источник
comment
Вы должны полагаться на текущий каталог только в том случае, если вы действительно хотите работать с текущим каталогом. Если вы хотите, чтобы специальная папка работала со специальной папкой   -  person Sir Rufo    schedule 07.01.2019
comment
На самом деле я сделал свой проект, как и любой другой разработчик-любитель, и обнаружил, что текущий каталог ограничивает доступ, что вызовет проблему, поэтому я хочу перейти в специальную папку, но не хочу менять коды.   -  person user10485400    schedule 07.01.2019
comment
Использование текущего каталога является хрупким, если вам приходится полагаться на конкретный каталог, потому что он может измениться во время выполнения (даже неожиданно) и может вызвать некоторые нежелательные побочные эффекты. Если вы хотите избавиться от этих (потенциальных) побочных эффектов, вы должны изменить свой код. Период.   -  person Sir Rufo    schedule 07.01.2019


Ответы (2)


Вы пытались сделать это через домен приложения.

Видеть:

https://docs.microsoft.com/en-us/dotnet/api/system.appdomain.basedirectory?view=netframework-4.7.2

    // Create application domain setup information
    var domaininfo = new AppDomainSetup();
    domaininfo.ConfigurationFile = System.Environment.CurrentDirectory + 
                                   Path.DirectorySeparatorChar +
                                   "ADSetup.exe.config";
    domaininfo.ApplicationBase = System.Environment.CurrentDirectory;

    //Create evidence for the new appdomain from evidence of the current application domain
    Evidence adEvidence = AppDomain.CurrentDomain.Evidence;

    // Create appdomain
    AppDomain domain = AppDomain.CreateDomain("Domain2", adEvidence, domaininfo);

    // Display application domain information.
    Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
    Console.WriteLine("Child domain: " + domain.FriendlyName);
    Console.WriteLine();
    Console.WriteLine("Configuration file: " + domain.SetupInformation.ConfigurationFile);
    Console.WriteLine("Application Base Directory: " + domain.BaseDirectory);

    AppDomain.Unload(domain);
person Michael Ceber    schedule 07.01.2019
comment
Нет. Я не знал, что так можно сделать. Я попробую это, и, конечно, это немного отличается, но выглядит великолепно. Спасибо! - person user10485400; 07.01.2019
comment
@user10485400 user10485400 Когда вы узнаете - пожалуйста, вернитесь сюда и отметьте ответ как правильный или прокомментируйте иначе. - person LosManos; 07.01.2019

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

Лучшее использование se было бы просто получить путь к данным приложения

Environment.specialfolder и используйте его.

В противном случае ответ, опубликованный выше, дается самой MSDN и, очевидно, работает, но слишком большой код

person user10485400    schedule 18.01.2019