C # Необязательные поля в настройках приложения - PullRequest
9 голосов
/ 06 июля 2011

Есть ли способ создать несколько дополнительных полей в настройках приложения. Например, для одного клиента нам нужны клиентские настройки в файле настроек, что-то вроде этого:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <userSettings>
      <setting name="Client_1_out_folder" serializeAs="String">
        <value>c:\</value>
      </setting>
      <setting name="Some_other_setting" serializeAs="String">
        <value>True</value>
      </setting>
      ...

А для другого клиента нам вообще не нужен Client_1_out_folder, поэтому, чтобы сохранить файл конфигурации в чистоте, было бы неплохо удалить его из файла конфигурации все вместе. Таким образом, для клиента 2 эта часть файла конфигурации будет выглядеть так:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <userSettings>
      <setting name="Some_other_setting" serializeAs="String">
        <value>True</value>
      </setting>
      ...

Ответы [ 7 ]

8 голосов
/ 10 июля 2011

Создайте раздел конфигурации custon для ваших настроек. Затем в классе раздела конфигурации пометьте свойство как «IsRequired = false», чтобы сделать это свойство необязательным.

[ConfigurationProperty("frontPagePostCount"
    , DefaultValue = 20
    , IsRequired = false)]
4 голосов
/ 06 июля 2011

Я рекомендую создавать свои собственные разделы конфигурации с помощью Конфигуратор разделов конфигурации .

К сожалению, этот инструмент не совместим с VS2010, но он настолько полезен, что я продолжаю использовать VS2008 для его использования. В любом случае вы создадите дополнительную сборку для обработчика раздела конфигурации, чтобы вы могли использовать VS2008 только для этой сборки и построить остальную часть решения с VS2010. Так что это вовсе не огромный недостаток.

4 голосов
/ 06 июля 2011

Вы можете создать класс, который наследуется от ConfigurationSection.

Тогда вы можете делать практически все, что захотите.Он гораздо мощнее пользовательских настроек.

MSDN: Практическое руководство. Создание пользовательских разделов конфигурации с помощью ConfigurationSection

Параметры конфигурации ASP.NET можно расширить с помощьюЭлементы конфигурации XML ваши собственные.Для этого вы создаете пользовательский обработчик раздела конфигурации.Обработчик должен быть классом .NET Framework, который наследуется от класса System.Configuration.ConfigurationSection.Обработчик раздела интерпретирует и обрабатывает параметры, определенные в элементах конфигурации XML в определенном разделе файла Web.config.Вы можете читать и записывать эти настройки через свойства обработчика.

В статье написано "ASP.NET", но это не только для ASP.NET.Это работает одинаково хорошо для WinForms.

0 голосов
/ 16 июля 2011

Я подозреваю, что в вашем вопросе чего-то не хватает.

Если клиент 2 не требует настройки "Client_1_out_folder" и не пытается извлечь его во время выполнения, вы можете просто удалить его,без необходимости вносить другие изменения.

Вы пытались это сделать?

0 голосов
/ 16 июля 2011

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

Однако вы также можете справиться с этим с помощью класса, который собирает эти данные и проверяет их наличие (или нет), сохраняя их все ещев разделе настроек пользователя.Таким образом, ваш основной код будет иметь доступ к настройке из класса:

if(Settings.HasClient)
    //use Settings.Client;

Process(Settings.OtherSetting);

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

0 голосов
/ 15 июля 2011

Существует также хороший пример о создании пользовательских разделов конфигурации.

Надеюсь, это поможет вам ...

app-config-and-custom-configuration-разделы

0 голосов
/ 06 июля 2011

Поместите эти общие настройки в файл .config и отошлите их в специальный файл конфигурации.

<!-- in general.config -->
<appSettings>
  <add key="common1" value="something"/>
  <add key="common2" value="something else"/>
</appSettings>

<!-- in client1.config -->
<appSettings file="general.config" >
  <add key="specialKey1" value="for client 1 only"/>
</appSettings>

<!-- in client2.config -->
<appSettings file="general.config" >
  <add key="specialKey2" value="for client 2 only"/>
</appSettings>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...