如何阅读在C#中不同的应用程序的一个app.config [英] How to read an App.Config of a different application in C#

查看:129
本文介绍了如何阅读在C#中不同的应用程序的一个app.config的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有C#编写的,它使用一个app.config文件中的控制台应用程序。本申请旨在使用任务调度程序的服务器上运行。现在,我想开发一个用户界面,从中读取,并在app.config写道。 (请注意,此配置并不旨在取代UI应用程序的配置文件)。

不过,我挣扎来读取文件中的设置。使用ConfigurationManager中,我能打开配置文件,但我不能访问配置设置。

这是由Visual Studio生成示例配置文件(2010):

 < XML版本=1.0编码=UTF-8&GT?;
<结构>
    < configSections>
        < sectionGroup名=userSettingsTYPE =System.Configuration.UserSettingsGroup,系统,版本= 4.0.0.0,文化=中性公钥= b77a5c561934e089>
            <节名称=AccessingConfigSample.Properties.SettingsTYPE =System.Configuration.ClientSettingsSection,系统,版本= 4.0.0.0,文化=中性公钥= b77a5c561934e089allowExeDefinition =MachineToLocalUserrequirePermission =FALSE/>
        < / sectionGroup>
    < / configSections>
    < userSettings>
        < AccessingConfigSample.Properties.Settings>
            <设定名=ApplicationTitleserializeAs =字符串>
                <价值>访问配置文件< /值GT;
            < /设置>
            <设定名=VersionNo进行serializeAs =字符串>
                <价值> V 1.0< /值GT;
            < /设置>
        < /AccessingConfigSample.Properties.Settings>
    < / userSettings>
< /结构>
 

在计算器咨询一些文章之后,我想这打开文件并访问用户的部分:

 如果(File.Exists(CONFIGFILE))
{
   VAR configMap =新ExeConfigurationFileMap {ExeConfigFilename = CONFIGFILE};
   无功配置= ConfigurationManager.OpenMappedExeConfiguration(configMap,ConfigurationUserLevel.None);
   变种userSection = config.GetSection(userSettings);
}
 

我想这个问题,以及:

  VAR userSection = config.GetSection(AccessingConfigSample.Properties.Settings);
 

这两个返回的

那么,我做错了什么?

任何帮助或暗示的高度AP preciated!

解决方案

正在使用<一个你作为一个例子使用的配置文件href="https://msdn.microsoft.com/en-us/library/system.configuration.configurationsectiongroup(v=vs.110).aspx"相对=nofollow> ConfigurationSectionGroup 以及那些需要读取与匹配方法<一href="https://msdn.microsoft.com/en-us/library/system.configuration.configuration.getsectiongroup(v=vs.110).aspx"相对=nofollow> GetSectionGroup 配置元素而不是 GetSection

下面code段不输出SectionGroup到调试控制台内容:

 如果(File.Exists(CONFIGFILE))
{
    VAR configMap =新ExeConfigurationFileMap {ExeConfigFilename = CONFIGFILE};
    无功配置= ConfigurationManager.OpenMappedExeConfiguration(configMap,ConfigurationUserLevel.None);
    //获取sectionGroup!
    变种userSectionGroup = config.GetSectionGroup(userSettings);
    的foreach(在userSectionGroup.Sections VAR userSection)
    {
        //检查一个ClientSettingSection
        如果(userSection是ClientSettingsSection)
        {
            //投自ConfigSection到一个更特殊类型
            VAR clientSettingSect =(ClientSettingsSection)userSection;
            的foreach(在clientSettingSect.Settings SettingElement clientSetting)
            {
                的Debug.WriteLine(的String.Format({0} = {1},clientSetting.Name,clientSetting.Value.ValueXml.InnerText));
            }
        }

    }
}
 

请注意,我投的对象实例到<一个href="https://msdn.microsoft.com/en-us/library/system.configuration.clientsettingssection(v=vs.110).aspx"相对=nofollow> ClientSettingSection 以检索的设置值(这是一个 SettingElement )。

如果你把这个与您提供的结果在调试输出窗口窗格应该是样本的配置工作:

ApplicationTitle =访问配置文件 VersionNo进行= V 1.0

I have a console application written in C# which uses an app.config file. This application is intended to be run on a server using the task scheduler. Now I want to develop a UI that reads and writes from and to the app.config. (Note that this config is not intended to replace the config file of the UI application.)

But I'm struggling to read the settings from the file. Using the ConfigurationManager I'm able to open the config file, BUT I cannot access the configuration settings.

This is the sample config file generated by 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>

After consulting several article on stackoverflow, I tried this to open the file and access the user section:

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

I tried this as well:

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

Both returned null.

So what am I doing wrong here?

Any help or hints are highly appreciated!

解决方案

The config file you use as an example is using a ConfigurationSectionGroup and those need to be read with the matching method GetSectionGroup on the Configuration element instead of GetSection

The following code snippet does output the content of the SectionGroup to the Debug console:

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 ));
            }
        }

    }
}

Notice that I cast the object instance to a ClientSettingSection to retrieve the settings value (which is a SettingElement).

If you put this to work with the sample config you provided the result in the Debug Output Window pane should be:

ApplicationTitle=Accessing Config files
VersionNo=V 1.0

这篇关于如何阅读在C#中不同的应用程序的一个app.config的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆