Использование App.config для установки строго типизированных переменных

Я новичок в C #, использующий .NET 3.5, и хотел бы сохранить несколько значений приложения по умолчанию в App.config, поскольку настройки могут различаться в зависимости от серверной среды (например, разработка, постановка, производство). То, что я хочу сделать, похоже на то, что описано в эта статья на StackOverflow, но я также хочу иметь возможность использовать нестроковые значения (например, int, bool). Что-то вроде этого (имена-значения - это просто примеры, кстати):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <applicationSettings>
        <MyApp>
            <setting name="InitText" serializeAs="String">
                <value>Hello</value>
            </setting>
            <setting name="StartAt" serializeAs="Integer">
                <value>5</value>
            </setting>
            <setting name="IsWeekend" serializeAs="Boolean">
                <value>True</value>
            </setting>
        </MyApp>
    </applicationSettings>
</configuration>

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


person Mass Dot Net    schedule 20.11.2009    source источник


Ответы (4)


Как насчет использования архитектуры параметров приложения .NET Framework. У вас может быть строго типизированный доступ к значениям по умолчанию.

В проекте приложения Windows файл настроек автоматически создается в папке «Ресурсы». Затем вы можете добавить настройки приложения, которые сохранятся в файле App.config, как вы показали в своем вопросе.

Например:

int i = Settings.Default.IntSetting;

bool b = Settings.Default.BoolSetting;

Изменить: если ваш проект не содержит файла настроек, вы всегда можете добавить его, добавив новый элемент и выбрав файл настроек. (Щелкните правой кнопкой мыши файл проекта и выполните: Добавить-> Новый элемент-> Файл настроек). В моем случае я назвал его «Настройки», но вы можете называть его как хотите.

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

person João Angelo    schedule 20.11.2009
comment
Думаю, это то, что мне нужно, но я не могу получить доступ к переменным через C #. Когда я набираю Settings. Intellisense ничего не видит ... - person Mass Dot Net; 20.11.2009
comment
На самом деле это не встроено во фреймворк, это скорее часть IDE. Когда вы добавляете файл .settings в свой проект C # / VB, он используется для генерации кода для класса Settings, который обертывает параметры конфигурации как свойства соответствующего типа и выполняет все необходимые преобразования и т. Д. - person Pavel Minaev; 20.11.2009
comment
Спасибо за разъяснения - я ценю это. - person Mass Dot Net; 26.11.2009
comment
Это хороший ответ ... однако он не требует внесения изменений в настройки пользователями. Если вы измените значение в файле .settings, вам придется перестроить решение, чтобы получить новое значение! Пользователи обычно злятся на подобные вещи. :) - person SASS_Shooter; 10.12.2014
comment
К вашему сведению, первая часть Settings.Default ... относится к имени вашего файла .settings. Мой назывался AppSettings.settings, поэтому мне пришлось использовать AppSettings.Default ... - person Justas; 18.03.2016
comment
Если вы получаете сообщение об ошибке при чтении файла app.config. при попытке serializeAs что-либо, кроме строки, сначала выполните serializeAs="String", переключитесь на настройки проекта, затем вы можете вернуться и изменить String на любой тип, который вы хотите использовать. - person Josh Noe; 03.08.2016

То, что предложил JayG, может быть выполнено Visual Studio автоматически. Используйте мастер настройки приложения , как описано в MSDN. Также стоит прочитать всю инфраструктуру Application Settings.

person tobsen    schedule 20.11.2009

Похоже, вы хотите иметь собственный <configSection>. В основном это работает так:

-Создайте класс конфигурации, который имеет правильные значения по умолчанию и т. Д., И настройте хорошую структуру наследования, чтобы он автоматически загружался на основе ваших настроек web.config. -Добавьте раздел конфигурации в web.config, указав «тип», который будет загружать ваши настройки, чтобы платформа .NET знала, что инициализировать.

Вы можете найти всевозможную информацию об этом в библиотеке MSDN. Примеры - asp.net, но они также отлично работают с конфигурациями приложений.

person jvenema    schedule 20.11.2009
comment
Для этого вам не нужно писать собственный configSection. - person BrainSlugs83; 12.09.2013

person    schedule
comment
Или Boolean.TryParse (...). msdn.microsoft.com/en-us/library/system. boolean.tryparse.aspx - person Mike Atlas; 20.11.2009
comment
не нарушает ли это часть требований строго типизированных переменных, вы по-прежнему сохраняете строку в app.config - person Nathan Koop; 20.11.2009
comment
Да, я не хочу переделывать строку в правильный тип. - person Mass Dot Net; 20.11.2009
comment
Я собирался добавить к своему ответу, что это действительно не строго типизировано для чего-либо, кроме строк, но телефон зазвонил. Вам нужно будет использовать convert только для нестроковых типов данных. Тем не менее, я поддержал ответ Жоао Анджело, похоже, он может быть немного круче. - person JayG; 20.11.2009
comment
Или var isWeekend = Boolean.Parse (ConfigurationManager.AppSettings [IsWeekend] ?? false) - person Christo; 23.04.2014
comment
Вместо этого я бы создал класс с некоторыми аннотациями, описывающими имя и тип ключа конфигурации, и пусть это будет то, как вы делаете сопоставление. Затем просто создайте класс, в котором есть все переменные строгого типа, соответствующие разделу настроек в файле конфигурации. - person user441521; 24.08.2016