Использование настроек приложения и чтение значений по умолчанию из app.config - PullRequest
5 голосов
/ 02 апреля 2010

Мне нужно развернуть приложение Windows Forms, используя развертывание ClickOnce. (VS2008, .NET 3.5) И мне нужно предоставить файл конфигурации для этого приложения, который может изменить любой пользователь. По этой причине я использую настройки приложения вместо стандартных appSetttings в app.config, чтобы можно было отделить пользовательский конфиг от конфиг приложения.

см. http://msdn.microsoft.com/en-us/library/ms228995(VS.80).aspx

При создании файла Settings.settings с использованием VS был создан класс с жестко заданными значениями по умолчанию, например:

[global::System.Configuration.DefaultSettingValueAttribute("blahblah")]
public string MyProperty
...

Я хочу прочитать значения по умолчанию из app.config!

Итак, я создал свой собственный класс, производный от ApplicationSettingsBase, но я не могу получить его для чтения значений из app.config. Есть идеи?

Ответы [ 2 ]

1 голос
/ 02 апреля 2010

Я написал свой собственный класс конфигурации для сохранения настроек. Еще одна вещь, которая может быть вам полезна, - если вы хотите, чтобы настройки сохранялись при обновлении приложения ClickOnce, я рекомендую вам поместить его где-то, кроме кэша ClickOnce. Это также облегчит поиск ваших пользователей. В этой статье рекомендуется использовать LocalApplicationData (потому что вы можете писать в него с помощью Vista или Win7), но вы можете даже захотеть поместить его в MyDocuments, поскольку вы хотите, чтобы пользователь мог его редактировать.

http://robindotnet.wordpress.com/2009/08/19/where-do-i-put-my-data-to-keep-it-safe-from-clickonce-updates/

RobinDotNet

0 голосов
/ 02 апреля 2010

Я реализовал ApplicationSettingsBase следующим образом:

    public class UserSettings : ApplicationSettingsBase
        {
            private static UserSettings defaultInstance = ((UserSettings)(ApplicationSettingsBase.Synchronized(new UserSettings())));

            public static UserSettings Default
            {
                get
                {
                    return defaultInstance;
                }
            }

            [UserScopedSetting()]
            public string MyProperty
            {
                get { return (string)this["MyProperty"]; }
                set { this["MyProperty"] = (string)value; }
            }
            //add more properties
}

И добавил правильный xml в app.config ...

см. http://msdn.microsoft.com/en-us/library/8eyb2ct1(VS.80).aspx

и это работает. НТН!

Слово предупреждения !! ApplicationSettingsBase появляется для использования некоторой отложенной загрузки в реализации. Коллекции ApplicationSettingsBase.Properties и ApplicationSettingsBase.PropertyValues остаются пустыми, пока не получен доступ хотя бы к одному свойству.

UserSettings settings = new UserSettings();
string temp = settings.MyProperty;//without this line, settings.PropertyValues is empty!! 
SettingsPropertyValueCollection properties = settings.PropertyValues;
...