如何在C#中读取另一个应用程序的App.Config文件

5
我有一个用C#编写的控制台应用程序,它使用一个app.config文件。这个应用程序旨在在服务器上使用任务计划程序运行。现在我想开发一个UI,从app.config读取和写入数据。(注意,这个配置不打算替换UI应用程序的配置文件。)
但是我无法从文件中读取设置。使用ConfigurationManager我能够打开配置文件,但是我无法访问配置设置。
这是Visual Studio(2010)生成的示例配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="AccessingConfigSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <AccessingConfigSample.Properties.Settings>
            <setting name="ApplicationTitle" serializeAs="String">
                <value>Accessing Config files</value>
            </setting>
            <setting name="VersionNo" serializeAs="String">
                <value>V 1.0</value>
            </setting>
        </AccessingConfigSample.Properties.Settings>
    </userSettings>
</configuration>

在查阅了几篇stackoverflow文章后,我尝试使用以下方法打开文件并访问用户部分:

if (File.Exists(configFile))
{
   var configMap = new ExeConfigurationFileMap{ ExeConfigFilename = configFile};
   var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
   var userSection = config.GetSection("userSettings");
}

我也尝试过这个:

var userSection = config.GetSection("AccessingConfigSample.Properties.Settings");

两者都返回null

那么我在这里做错了什么呢?

非常感谢任何帮助或提示!


尝试使用 config.GetSectionGroup("userSettings")["AccessingConfigSample.Properties.Settings"] - Jeroen Mostert
您也可以将该文件解析为任何XML文件... - Crono
@Crono:我本来想将其解析为xml文件,但我想把这个任务交给.NET的配置程序集。 - ThorstenHa
1个回答

5
您所使用的配置文件示例是使用ConfigurationSectionGroup,应该使用匹配的方法GetSectionGroup在Configuration元素上读取它们,而不是GetSection
下面的代码片段会将SectionGroup的内容输出到Debug控制台:
if (File.Exists(configFile))
{
    var configMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
    var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
    // get the sectionGroup!
    var userSectionGroup = config.GetSectionGroup("userSettings");
    foreach (var userSection in userSectionGroup.Sections)
    {
        // check for a ClientSettingSection
        if (userSection is ClientSettingsSection)
        {
            // cast from ConfigSection to a more specialized type
            var clientSettingSect = (ClientSettingsSection) userSection;
            foreach (SettingElement clientSetting in clientSettingSect.Settings)
            {
                Debug.WriteLine(String.Format("{0}={1}", clientSetting.Name, clientSetting.Value.ValueXml.InnerText ));
            }
        }

    }
}

请注意,我将对象实例强制转换为ClientSettingSection以检索设置值(这是一个SettingElement)。
如果您使用提供的示例配置来工作,调试输出窗口窗格中的结果应为:
ApplicationTitle=Accessing Config files
VersionNo=V 1.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接