Сохраните один и тот же ключ в Machine.config и App.config

Я держу пользовательский раздел конфигурации в machine.config следующей структуры:

<CustomSettings>
   <add key="testkey" local="localkey1" dev="devkey" prod="prodkey"/>
</CustomSettings>

Теперь я хочу иметь возможность переопределить те же настройки ключа, сохранив переопределения в app.config следующим образом:

<CustomSettings>
   <add key="testkey" dev="devkey1" prod="prodkey1"/>
</CustomSettings>

Так что, когда я прочитаю его в коде, я получу - dev = "devkey1", prod = "prodkey1", local = "localkey1"

Проблема в том, что когда я читаю свой раздел конфигурации, например:

CustomConfigurationSection section = ConfigurationManager.GetSection("CustomSettings") as CustomConfigurationSection;

я получаю сообщение о том, что ключ уже был добавлен:

"Запись" testkey "уже добавлена".

Я изменил создание функции ConfigElementCollection.Add, чтобы проверить, существует ли такой же ключ, но он не работает.

Есть идеи?

2 ответа

Решение

В итоге я переопределил BaseAdd в ConfigurationElementCollection:

protected override void BaseAdd(ConfigurationElement element)
    {


 CustomConfigurationElement newElement = element as CustomConfigurationElement;

      if (base.BaseGetAllKeys().Where(a => (string)a == newElement.Key).Count() > 0)
      {
        CustomConfigurationElement currElement = this.BaseGet(newElement.Key) as CustomConfigurationElement;

        if (!string.IsNullOrEmpty(newElement.Local))
          currElement.Local = newElement.Local;

        if (!string.IsNullOrEmpty(newElement.Dev))
          currElement.Dev = newElement.Dev;

        if (!string.IsNullOrEmpty(newElement.Prod))
          currElement.Prod = newElement.Prod;
      }
      else
      {
        base.BaseAdd(element);
      }
    }

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

Сначала вы должны удалить ключ, попробуйте

<CustomSettings>
   <remove key="testkey"/>
   <add key="testkey" dev="devkey1" prod="prodkey1"/>
</CustomSettings> 

Это должно делать свое дело

Другие вопросы по тегам