У меня есть проект C#, который считывается из автономного файла конфигурации с именем test.config
. Это отдельный файл от обычного файла App.config
.
Я пытаюсь определить, содержит ли файл test.config
необязательное свойство TestProperty
из кода. Я попытался использовать TestProperty.ElementInformation.IsPresent
, но это всегда приводит к значению FLASE, даже если элемент раздела действительно существует.
class Program
{
static void Main(string[] args)
{
string filePath = @"C:\Users\username\Desktop\TestProject\ConfigTestApp\Test.Config";
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(filePath);
fileMap.ExeConfigFilename = Path.GetFileName(filePath);
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
TestConfigSection section = config.GetSection("TestConfigSection") as TestConfigSection;
bool isPresent = section.TestProperty.ElementInformation.IsPresent; // Why is this always false?
}
}
Файл test.config
выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name ="TestConfigSection" type ="ConfigTestApp.TestConfigSection, ConfigTestApp"/>
</configSections>
<TestConfigSection>
<TestProperty testvalue="testing 123" />
</TestConfigSection>
</configuration>
Классы поддержки:
public class TestConfigSection : ConfigurationSection
{
[ConfigurationProperty("TestProperty", IsRequired = true)]
public TestConfigElement TestProperty
{
get
{
return base["TestProperty"] as TestConfigElement;
}
}
}
public class TestConfigElement : ConfigurationElement
{
[ConfigurationProperty("testvalue", IsKey = true, IsRequired = true)]
public string TestValue
{
get { return base["testvalue"] as string; }
set { base["testvalue"] = value; }
}
}
Если я перемещу раздел в App.config и использую ConfigurationManager.GetSection("TestConfigSection")
, IsPresent работает нормально, но мне нужно, чтобы это работало из отдельного файла (test.config).
Есть ли способ заставить TestProperty.ElementInformation
работать или любой другой способ определить, содержит ли файл test.config свойство TestProperty
?
ElementInformation
илиSectionInformation
для других подсказок. Раньше эта штука доставляла мне безумное горе. Возможно, вам будет намного проще просто прочитать файл JSON или что-то в этом роде и избавить себя от проблем, если это возможно. - person Scott Hannen   schedule 13.06.2019