У меня есть код в первой программе, ссылающийся на конфигурацию второй, где TConfig is ConfigurationSection
.
protected TConfig GetCustomConfig<TConfig>(string configFilePath, string sectionName) where TConfig : ConfigurationSection
{
var exeFileMap = new ExeConfigurationFileMap();
exeFileMap.ExeConfigFilename = configFilePath;
var customConfig = ConfigurationManager.OpenMappedExeConfiguration(exeFileMap,
ConfigurationUserLevel.None);
var returnConfig = customConfig.GetSection(sectionName) as TConfig;
return returnConfig;
}
Параметр configFilePath - это путь конфигурации второй программы. У меня есть две версии конфигурации второй программы.
Версия A
<InterfaceSection>
<paramGroups>
<paramGroup param1="param1" param2="param2">
</paramGroup>
</paramGroups>
</InterfaceSection>
и версия B
<InterfaceSection>
<paramGroups>
<paramGroup param1="param1" param2="param2" param3="param3">
</paramGroup>
</paramGroups>
</InterfaceSection>
В первом Программа Я успешно выполняю метод GetCustomConfig(string versionAconfigFilePath, string interfaceSectionName)
. Затем я выполняю этот метод для версии конфигурации B: GetCustomConfig(string versionBconfigFilePath, string interfaceSectionName)
. И получите ошибку: Атрибут «Неизвестный» param3 ». Имена атрибутов чувствительны к регистру.»
Почему вторая версия конфигурации сравнивается с первой? Если вы пропустите загрузку первой версии, вторая версия будет успешно загружена.
ОБНОВЛЕНИЕ
У меня есть следующее определение для раздела конфигурации версии B. В разделе конфигурации версии A отсутствует свойство param3 . В этом разница между ними.
public class MyParamGroup : ParamGroup
{
[ConfigurationProperty("param3", DefaultValue = 60, IsKey = false, IsRequired = false)]
public int param3
{
get
{
return (int)this["param3"];
}
set
{
this["param3"] = value;
}
}
}
[ConfigurationProperty("param1", DefaultValue = 60, IsKey = false, IsRequired = false)]
public int param1
{
get
{
return (int)this["param1"];
}
set
{
this["param1"] = value;
}
}
[ConfigurationProperty("param2", DefaultValue = 60, IsKey = false, IsRequired = false)]
public int param2
{
get
{
return (int)this["param2"];
}
set
{
this["param2"] = value;
}
}
public class ParamGroup : ConfigurationSection
{
Somethings properties
}