Сохраните один и тот же ключ в 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>
Это должно делать свое дело