Где кешируются настройки свойств приложения? - PullRequest
0 голосов
/ 07 мая 2020

Недавно я столкнулся с проблемой, когда пытался использовать придуманное мной консольное приложение. Я определил настройки на панели свойств проекта VS2019, и когда я хотел протестировать приложение на другом компьютере, где я никогда не запускал его, я скопировал exe и файл exe.config, я отредактировал настройки в .config файл, чтобы отразить новую среду, но когда я запустил приложение, я увидел, что оно все еще запускается со старыми настройками.

Итак, когда я заглянул в него, я попробовал как Reload(), так и Reset(), но он просто не загружался из файла .config. Я попытался заглянуть в AppData\Local\ConsoleAppName, но папку нигде не найти.

Затем я попробовал мастер публикации и экспериментировал с различными вариантами публикации, но ничего не изменилось, только так я мог их изменить настройки были через страницу свойств в VS2019.

Я написал следующее, чтобы провести некоторые тесты:

using ConsoleApp12.Properties;
using System;
using System.Configuration;

namespace ConsoleApp12
{
    class Program
    {

        public static void PrintParametres()
        {
            var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
            Console.WriteLine(path);
            foreach (SettingsProperty lSetting in Settings.Default.Properties)
            {
                Console.WriteLine("{0} = {1}", lSetting.Name, lSetting.DefaultValue);
            }
        }
        static void Main()
        {
            Settings.Default.Reload();
            ConsoleKeyInfo cki;
            PrintParametres();
            do
            {
                cki = Console.ReadKey(true);
                switch (cki.Key)
                {
                    case ConsoleKey.P:
                        PrintParametres();
                        break;
                    default:
                        Console.WriteLine("Print P for settings, Ctrl-C or Q to quit.");
                        break;
                }
            }
            while (cki.Key != ConsoleKey.Q);
            Settings.Default.Save();
        }
    }
}

Единственные файлы, которые он создает, - это .exe, .exe.config и .pdb. В исходном файле .config у меня есть:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="ConsoleApp12.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <userSettings>
        <ConsoleApp12.Properties.Settings>
            <setting name="TestSetting" serializeAs="String">
                <value>Some text in setting</value>
            </setting>
        </ConsoleApp12.Properties.Settings>
    </userSettings>
</configuration>

И если я изменю значение на <value>Some other text in setting</value>, результат для path всегда будет %userprofile%\appdata\local\AppName\AppName.exe_Url_2543oxfebn2t3ud4uo1qvikliy41i53h\1.0.0.0\user.config, но даже с видимыми системными файлами я не могу найдите эту папку, и свойства соответствуют тому, что определено в проекте, но они не отражают изменений в файле .config.

Есть кое-что, чего я действительно не понимаю в этой ситуации. Может, я неправильно понял в документации, или, может быть, это c для приложений Forms? Сейчас это консольное приложение, но цель состоит в том, чтобы сделать сервис, так что мне здесь не хватает? или мне следует поступить иначе?

РЕДАКТИРОВАТЬ: Этот вопрос уже был изучен, ответы были проверены и не дали никакого решения.

1 Ответ

0 голосов
/ 07 мая 2020
• 1000

Для сохранения и использования при следующем выполнении они должны быть сохранены с Save(), после чего файл user.config фактически создается под AppData\Local\Appname, но иначе файл не создается, если настройки никогда не изменяются и не сохраняются во время выполнения.

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

Однако настройки, хранящиеся в файле application.exe.config, похоже, не используются в любое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...