Как сохранить настройки для развертываемого приложения C #? - PullRequest
3 голосов
/ 09 июля 2010

Я хочу сохранить настройки для моего приложения C #, чтобы настройки по умолчанию можно было легко отправлять с моими двоичными файлами, а конечный пользователь мог изменить их с помощью простого текстового редактора (или каким-либо другим простым способом).Кажется, у меня есть несколько вариантов: файл .config, файл .settings или файл .resx.Каковы плюсы и минусы этого?

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

Edit2: Настройки похожи настроки подключения и некоторые другие параметры (в основном одноразовые).Создание какого-либо GUI / API для их изменения на самом деле не вариант.Кроме того, мое приложение не будет редактировать ни одно из этих значений, поэтому сохранение через код не требуется.

Ответы [ 6 ]

4 голосов
/ 09 июля 2010

Да, Project + Properties, вкладка Settings была разработана для этого.Добавьте здесь свои настройки, измените Область применения.Это создаст файл app.exe.config в вашей директории сборки, разверните его вместе с вашим EXE-файлом.Используйте Properties.Settings.Default. SettingName в своем коде, чтобы получить значение настройки.Вашему пользователю обычно требуются права администратора для редактирования файла .exe.config на целевом компьютере, чтобы изменить значение параметра.

Мелкий шрифт: параметры не работают хорошо для сборок DLL, необходимо объединитьКонфигурационные файлы от руки.При использовании отладчика настройки извлекаются из файла app.vshost.exe.config.

Файл .settings является вспомогательным файлом, используемым в среде IDE, игнорируйте его.Файлы .Resx хранят ресурсы, они компилируются и встраиваются в двоичную форму в сборку.Они не редактируются пользователем.

1 голос
/ 09 июля 2010

Так как файл будет изменен пользователями, я думаю, использование app.config не очень хорошая идея. Что если они нарушат структуру файла? Или установить неверное значение? Возможно, ваше приложение будет зависать напрямую.

Одним из решений будет использование пользовательского XML-файла . Затем вы подтвердите его при запуске приложения. XSD, вероятно, будет более элегантным способом сделать это, но вы также можете анализировать его напрямую и проверять его в коде. Если файл недействителен, вместо сбоя вы попытаетесь решить проблему и, если это невозможно, отобразить для пользователя довольно большую ошибку, объяснив, что в строке XML в строке n , position n , что составляет [описание ошибки здесь] .

1 голос
/ 09 июля 2010

Файл .settings обычно используется для пользовательских настроек и информации о конфигурации (тогда как файл .config используется для глобальных настроек приложения или всего, что изменяет. Чистая среда выполнения. Простое помещение параметров в файл .config может изменить поведение вашего приложения, даже если вы не напишите для него ни одной строчки кода).

Дополнительные сведения см. В статье «Настройки» на MSDN: http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

.
1 голос
/ 09 июля 2010

Я думаю, у вас есть два способа сделать это.

  • Для обычных пользователей вы можете создать пользовательский графический интерфейс, который упростит их использование.
  • ДляОпытные пользователи могут редактировать конфигурации с помощью текстового редактора, если он хранится в текстовом файле (ini-файл, файл конфигурации и т. д.) или вы можете создать API.
0 голосов
/ 09 июля 2010

Ответ зависит от метода развертывания.Например, если вы используете ClickOnce и предлагаете обновления, вы можете столкнуться с проблемами при использовании Настройки приложения .

. Я считаю, что лучший способ - это создать графический интерфейс, который навернякаподходит для начинающих пользователей.Учитывая, что вы уже исключили эту опцию, используйте предложение Джона (ini-файлы).

0 голосов
/ 09 июля 2010

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

У вас есть еще пара альтернатив, которые вы не включили.Вы могли бы использовать .INI-файл старой школы, который более прост для понимания конечным пользователем.Вы также можете использовать реестр.Я бы порекомендовал INI-файл, если ваши пользователи не очень опытны, в этом случае используйте файл .config.

...