zoukankan      html  css  js  c++  java
  • C# 关于config文件中的usersettings

    在调整app.config的时候遇到了一点问题,把这个问题记录下来,可能我只是没有找到解决方案,问题本身也许并不复杂。

    1. 在VS中通过Properties中的Settings.settings来设置作用范围为用户的配置项,假设此时的配置名称为Port,配置的内容为A
      此时在程序中通过Properties.Settings.Default.Port来获取该配置项,获取到的值为A

    2. 生成解决方案之后,在.exe.config文件中修改该Port配置,将其修改成B
      程序中同样使用Properties.Settings.Default.Port来获取该值,此时获取到的是B

    3. 程序中使用Properties.Settings.Default.Properties["Port"].DefaultValue来获取Port配置,此时获取到的值 是A而不是B

    4. 程序中修改Properties.Settings.Default.Port 为C,并使用Properties.Settings.Default.Save()进行保存,再通过Properties.Settings.Default.Port来获取该配置,此时获取到的值为C。
      注意,这样的修改不会直接去改exe.config文件,而是会在用户目录下的可能是Appdata类似的目录下main的相应项目文件下下生成一个user.config文件,用户的修改在这个config文件中。

    5. 现在遇到的问题是如何在做了上面的1, 2, 3, 4之后,能够获取到值为B的配置,即直接读取config文件中的配置(有该需求的原因是用户可能直接改过这个config文件,而不是通过程序提供的某种方式修改的),而不是使用程序一开始配置的settings,也不使用用户在程序中修改后保存的settings。

    顺便记录一下读取配置类型为StringCollection的默认userSettings配置的方法:
    使用Xml解析:

    using System.Xml;
    
    var prop = Properties.Settings.Default.Properties["Port"].DefaultValue as string;
    var doc = new XmlDocument();
    doc.LoadXml(prop);
    XmlNodeList nodes = doc.SelectSingleNode("ArrayOfString").ChildNodes;
    
    var ts = new List<String>();
    foreach (XmlNode e in nodes)
        s.Add(e.InnerText);
    

    从app.config文件中看,这个配置项大概是这样的:

    <userSettings>
            <XXXX.Properties.Settings>
                <setting name="Port" serializeAs="Xml">
                    <value>
                        <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                            <string>1</string>
                            <string>2</string>
                            <string>3</string>
                            <string>4</string>
                            <string>5</string>
                            <string>6</string>
                            <string>7</string>
                            <string>8</string>
                            <string>9</string>
                            <string>10</string>
                            <string>11</string>
                        </ArrayOfString>
                    </value>
                </setting>
            </XXXX.Properties.Settings>
        </userSettings>
    
  • 相关阅读:
    VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
    什么是 Cookie
    Memcached的简介和使用
    visual studio 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5
    SQLServer中char、varchar、nchar、nvarchar的区别:
    Microsoft Visual Studio 2012旗舰版(VS2012中文版下载)官方中文版
    C#操作sql通用类 SQLHelper
    用C#写入Excel表并保存
    C# TreeView 控件的综合使用方法
    ADODB.Connection、ADODB.RecordSet
  • 原文地址:https://www.cnblogs.com/yutou2016/p/11243334.html
Copyright © 2011-2022 走看看