C# задава appdata или всеки специален път на папка в конфигурационния файл на приложението

Опитвах се да намеря начин да използвам пътя на appdata като моя среда.currentdurectory, което означава, че искам да стартирам приложението c# от папката appdata и в моя проект винаги използвах environment.currentdirectory.

Не можах да намеря начин, по който мога да задам път на appdata в конфигурацията на приложението и по-късно да заменя environment.curentdirectory с път на appdata...

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
Всъщност направих проекта си като всеки друг любител Dev и открих, че текущата директория ограничава достъпа, което ще причини проблема, така че искам да се преместя в специалната папка, но не искам да променям кодовете.   -  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 Когато разберете - моля, върнете се тук и маркирайте отговора като правилен или коментирайте друго. - person LosManos; 07.01.2019

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

Най-добрата употреба би била просто да получите пътя на данните на приложението

Environment.specialfolder метод и използвайте това.

В противен случай отговорът, публикуван по-горе, е даден от самия MSDN и очевидно работи, но твърде голям код

person user10485400    schedule 18.01.2019