C#-如何确定映射的EXE配置文件中是否存在配置节?

时间:2019-06-13 18:14:01

标签: c# configuration configuration-files configurationmanager

我有一个C#项目,该项目正在从名为<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select id="drpIdCorsi"></select> <select id="drpDocente"> <option>docente1@mail.edu</option> <option>docente2@mail.edu</option> <option>docente3@mail.edu</option> </select>的独立配置文件中读取。这是与典型test.config分开的 文件。

我正在尝试从代码确定App.config文件是否包含可选属性test.config。我尝试使用TestProperty,但这始终会导致FLASE的值,即使section元素实际上在那儿也是如此。

TestProperty.ElementInformation.IsPresent

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>

如果我将本节移至App.config并使用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; } } } ,则IsPresent似乎可以正常工作,但是我需要在单独的文件(test.config)中使用它。

是否有任何方法可以使ConfigurationManager.GetSection("TestConfigSection")正常工作,或者是否可以通过其他任何方法确定test.config文件是否包含TestProperty.ElementInformation属性?

1 个答案:

答案 0 :(得分:1)

也许这是您的问题:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(filePath);
fileMap.ExeConfigFilename = Path.GetFileName(filePath);

ExeConfigFilename应该不是这样的文件的完整路径吗?

fileMap.ExeConfigFilename = filePath;

如果这不是问题,最近我必须做一些像您正在做的事情,这就是我所做的(使用您的示例数据)。

string filePath = @"C:\Users\username\Desktop\TestProject\ConfigTestApp\Test.Config";
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
AppSettingsSection section = (AppSettingsSection) config.GetSection("TestConfigSection");

if ( section != null )
{
  string testValue = section .Settings["TestProperty"].Value;
}

在我的配置文件中,我使用了以下类型的格式:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <TestConfigSection file="">
    <clear />
    <add key="TestProperty" value="testing 123" />
  </TestConfigSection>
</configuration>