Добавление свойства пользовательских настроек во время выполнения (Winforms)

Я использую C#, формы win и.net 2.0

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

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

MessageBox.Show(***********.Properties.Settings.Default.Properties["NewProperty"].DefaultValue);

Я написал следующий код Вызов функции

clCommonFuncation cl = new clCommonFuncation();
        if (***********.Properties.Settings.Default.Properties["NewProperty"] == null)
        {
            cl.addPropertyinSettingsFile("NewProperty",
            ***********.Properties.Settings.Default.Providers,
            ***********.Properties.Settings.Default.Providers["LocalFileSettingsProvider"],
            ***********.Properties.Settings.Default.Properties,
            typeof(string),"ASD",null);
            ***********.Properties.Settings.Default.Save();
            ***********.Properties.Settings.Default.Reload();
        }

И это вызывает функцию

 public void addPropertyinSettingsFile(string settingName,
        SettingsProviderCollection settingsProviderCollection,
        SettingsProvider settingsProvider,
        SettingsPropertyCollection settingPrpertyCollection,
        Type dataType,
        object defaultValue,
        object settingDefault)
    {
        SettingsProperty lvSettingProperty = new SettingsProperty(settingName);
        lvSettingProperty.DefaultValue = defaultValue;
        lvSettingProperty.IsReadOnly = false;
        lvSettingProperty.PropertyType = dataType;
        lvSettingProperty.Provider = settingsProvider;
        lvSettingProperty.SerializeAs = SettingsSerializeAs.String;
        lvSettingProperty.Name = settingName;
        lvSettingProperty.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute),
            new System.Configuration.UserScopedSettingAttribute());
        settingPrpertyCollection.Add(lvSettingProperty);            
    }

Что я делаю не так? Любое предложение будет оценено Спасибо

2 ответа

Решение

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

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

Файлы настроек не предназначены для этой цели. Эти файлы предназначены для заполнения во время разработки и только для "чтения" или "изменения" во время выполнения.

Причина заключается в том, что при создании и редактировании файла настроек в конструкторе (двойным щелчком по файлу настроек в обозревателе решений или выбором вкладки настроек в пункте меню свойств проекта) Visual Studio создает класс ApplicationSettings (производный от класса ApplicationSettingsBase), который имеет члены данных для любого поля настройки, которое вы создали, плюс некоторые дополнительные атрибуты (например, [ApplicationScopedSetting] или [UserScopedSetings]). Во время выполнения среда выполнения.Net взаимодействует с файлами настроек с помощью этого класса. Поэтому, когда вы пытаетесь добавить свойства во время выполнения, у вас нет вспомогательных файлов и атрибутов в классе ApplicationSettings, и CLR не знает, что с ними делать.

Вывод: файл настроек имеет определенное использование и не подходит для произвольного сохранения конфигурации в вашем приложении. Попробуйте использовать файлы XML, которые полностью поддерживают все, что вам нужно, от чтения, записи, добавления, удаления, обновления свойств базовых типов (string, char, int и т. Д.) До поддержки сложных объектов с использованием XML.Seriliaization.

Другие вопросы по тегам