C# 关于config文件中的usersettings
Posted yutou2016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 关于config文件中的usersettings相关的知识,希望对你有一定的参考价值。
在调整app.config的时候遇到了一点问题,把这个问题记录下来,可能我只是没有找到解决方案,问题本身也许并不复杂。
在VS中通过Properties中的Settings.settings来设置作用范围为用户的配置项,假设此时的配置名称为Port,配置的内容为A
此时在程序中通过Properties.Settings.Default.Port来获取该配置项,获取到的值为A生成解决方案之后,在.exe.config文件中修改该Port配置,将其修改成B
程序中同样使用Properties.Settings.Default.Port来获取该值,此时获取到的是B程序中使用Properties.Settings.Default.Properties["Port"].DefaultValue来获取Port配置,此时获取到的值 是A而不是B 。
程序中修改Properties.Settings.Default.Port 为C,并使用Properties.Settings.Default.Save()进行保存,再通过Properties.Settings.Default.Port来获取该配置,此时获取到的值为C。
注意,这样的修改不会直接去改exe.config文件,而是会在用户目录下的可能是Appdata类似的目录下main的相应项目文件下下生成一个user.config文件,用户的修改在这个config文件中。现在遇到的问题是如何在做了上面的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>
以上是关于C# 关于config文件中的usersettings的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 读取 VB.NET 项目中的“app.config”文件
在 C# 运行时读取、写入和更新 app.config 文件中的连接字符串
在 C# 中的 app.config 文件中存储 < 和 > 字符时出错
C#的app.Config文件中设置,可以选择执行环境(左配置,有程序),app.Config中的appSettings首字母必须小写,符合源码要求