Необязательные поля C# в настройках приложения

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

<?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 ответов


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

[ConfigurationProperty("frontPagePostCount"
    , DefaultValue = 20
    , IsRequired = false)]

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

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

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

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

в статье говорится :ASP.NET", но это не только для ASP.NET - ... Он одинаково хорошо работает для WinForms.


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

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


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

Я надеюсь, что это может вам помочь...

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


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

<!-- 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>

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

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

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

Process(Settings.OtherSetting);

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


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

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

вы пробовали это сделать?