问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

asp.net2.0 读写config文件

发布网友 发布时间:2022-05-04 23:42

我来回答

4个回答

懂视网 时间:2022-05-05 04:03

在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个类就是System.Configuration

在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个类就是System.Configuration.ConfigurationManager,下面分别是例子:

  1. //读取config里名称为“conn”数据库连接信息
  2. connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
  3. //读取config里名称为"Font_Size"的应用程序配置信息
  4. System.Configuration.ConfigurationManager.AppSettings["Font-Size"] = 9;

不过利用这个类却不能对config文件进行写操作。对于config文件的写操作,很多人通过xml的方式来进行,按照xml的方式进行写操作在WinForm下虽然繁琐点,但是毕竟能完成。以下是按照xml文件进行写的例子。

  1. #region 保存配置
  2. XmlDocument document = LoadXml();
  3. XmlNode root = document.DocumentElement;
  4. XmlNodeList nodeList = root.FirstChild.ChildNodes;
  5. for (int i = 0; i < nodeList.Count; i++)
  6. {
  7. string key = nodeList[i].Attributes["key"].Value;
  8. if (key == "FilterOption")
  9. {
  10. nodeList[i].Attributes["value"].Value = ((int)container.FilterOption).ToString();
  11. }
  12. }
  13. document.Save(configPath);
  14. #endregion


但是在WebForm下,往往会因为权限不足而报错。如下图:

本文提供了另外一种方式,利用.net2.0类库里面的Configuration来进行写操作。详细介绍请看下面的详细介绍。

Configuration 是允许进行编程访问以编辑配置文件的类。对于WebForm的config文件,可以用如下代码得到Configuration类的实例:

  1. Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);

对于WinForm的config文件,可以用如下代码得到Configuration类的实例:

  1. Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);

需要注意的是,对文件进行写操作之后,需要调用Save()方法保存结果。整个程序的源代码如下,并附有详细代码注释。

  1. using System;
  2. using System.Configuration;
  3. using System.Web;
  4. using System.Windows.Forms;
  5. namespace NetSkycn.Common
  6. {
  7. ///
  8. /// 说明:Config文件类型枚举,
  9. /// 分别为asp.net网站的config文件和WinForm的config文件
  10. /// 作者:周公
  11. /// 日期:2008-08-23
  12. /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
  13. ///
  14. public enum ConfigType
  15. {
  16. ///
  17. /// asp.net网站的config文件
  18. ///
  19. WebConfig = 1,
  20. ///
  21. /// Windows应用程序的config文件
  22. ///
  23. ExeConfig = 2
  24. }
  25. ///
  26. /// 说明:本类主要负责对程序配置文件(.config)进行修改的类,
  27. /// 可以对网站和应用程序的配置文件进行修改
  28. /// 作者:周公
  29. /// 日期:2008-08-23
  30. /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
  31. ///
  32. public class ConfigurationOperator
  33. {
  34. private Configuration config;
  35. private string configPath;
  36. private ConfigType configType;
  37. ///
  38. /// 对应的配置文件
  39. ///
  40. public Configuration Configuration
  41. {
  42. get { return config; }
  43. set { config = value; }
  44. }
  45. ///
  46. /// 构造函数
  47. ///
  48. /// .config文件的类型,只能是网站配置文件或者应用程序配置文件
  49. public ConfigurationOperator(ConfigType configType)
  50. {
  51. this.configType = configType;
  52. if (configType == ConfigType.ExeConfig)
  53. {
  54. configPath = Application.ExecutablePath; //AppDomain.CurrentDomain.BaseDirectory;
  55. }
  56. else
  57. {
  58. configPath = HttpContext.Current.Request.ApplicationPath;
  59. }
  60. Initialize();
  61. }
  62. ///
  63. /// 构造函数
  64. ///
  65. /// .config文件的位置
  66. /// .config文件的类型,只能是网站配置文件或者应用程序配置文件
  67. public ConfigurationOperator(string configPath, ConfigType configType)
  68. {
  69. this.configPath = configPath;
  70. this.configType = configType;
  71. Initialize();
  72. }
  73. //实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法
  74. private void Initialize()
  75. {
  76. //如果是WinForm应用程序的配置文件
  77. if (configType == ConfigType.ExeConfig)
  78. {
  79. config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
  80. }
  81. else//WebForm的配置文件
  82. {
  83. config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);
  84. }
  85. }
  86. ///
  87. /// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值
  88. ///
  89. /// 节点名称
  90. /// 节点值
  91. public void AddAppSetting(string key, string value)
  92. {
  93. AppSettingsdiv appSetting = (AppSettingsdiv)config.Getdiv("appSettings");
  94. if (appSetting.Settings[key] == null)//如果不存在此节点,则添加
  95. {
  96. appSetting.Settings.Add(key, value);
  97. }
  98. else//如果存在此节点,则修改
  99. {
  100. ModifyAppSetting(key, value);
  101. }
  102. }
  103. ///
  104. /// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值
  105. ///
  106. /// 节点名称
  107. /// 节点值
  108. public void AddConnectionString(string key, string connectionString)
  109. {
  110. ConnectionStringsdiv connectionSetting = (ConnectionStringsdiv)config.Getdiv("connectionStrings");
  111. if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加
  112. {
  113. ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);
  114. connectionSetting.ConnectionStrings.Add(connectionStringSettings);
  115. }
  116. else//如果存在此节点,则修改
  117. {
  118. ModifyConnectionString(key, connectionString);
  119. }
  120. }
  121. ///
  122. /// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值
  123. ///
  124. /// 节点名称
  125. /// 节点值
  126. public void ModifyAppSetting(string key, string newValue)
  127. {
  128. AppSettingsdiv appSetting = (AppSettingsdiv)config.Getdiv("appSettings");
  129. if (appSetting.Settings[key] != null)//如果存在此节点,则修改
  130. {
  131. appSetting.Settings[key].Value = newValue;
  132. }
  133. else//如果不存在此节点,则添加
  134. {
  135. AddAppSetting(key, newValue);
  136. }
  137. }
  138. ///
  139. /// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值
  140. ///
  141. /// 节点名称
  142. /// 节点值
  143. public void ModifyConnectionString(string key, string connectionString)
  144. {
  145. ConnectionStringsdiv connectionSetting = (ConnectionStringsdiv)config.Getdiv("connectionStrings");
  146. if (connectionSetting.ConnectionStrings[key] != null)//如果存在此节点,则修改
  147. {
  148. connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
  149. }
  150. else//如果不存在此节点,则添加
  151. {
  152. AddConnectionString(key, connectionString);
  153. }
  154. }
  155. ///
  156. /// 保存所作的修改
  157. ///
  158. public void Save()
  159. {
  160. config.Save();
  161. }
  162. }
  163. }

用法实例:
(一)WebForm中的用法

  1. ConfigurationOperator co = new ConfigurationOperator(ConfigType.WebConfig);
  2. string key = txtConnectionStringKey.Text;
  3. string value = txtConnectionStringValue.Text;
  4. co.AddConnectionString(key, value);
  5. co.Save();

(二)WinForm中的用法

  1. ConfigurationOperator co = new ConfigurationOperator(ConfigType.ExeConfig);
  2. co.AddAppSetting("Font-Size", "9");
  3. co.AddAppSetting("WebSite", "http://blog.csdn.net/zhoufoxcn");
  4. co.AddConnectionString("Connection", "test");
  5. co.Save();//保存写入结果

我在WinForm里加入了一个空白的app.config文件,经过上面的操作得到如下结果(这个文件是和最后生成的exe文件在同一个目录下,而不是和源代码在同一文件夹下的那个config文件):

经过这个封装类可以简化对config配置文件的操作,仅仅是需要在实例化Configuration类的实例时指明打开的是网站还是应用程序的config文件,并且在进行了所有修改和增加操作之后调用Save()方法保存所做的修改即可。需要注意的是:要想把上面的程序作为类库编译,需要添加对System.Web.dll和System.Windows.Forms.dll和System.Configuration.dll类库的引用。

热心网友 时间:2022-05-05 01:11

使用 xmldocument 进行操作。

像操作 XML 文件一样。

XML是一项热门的技术。它之所以能够引起人们的兴趣,一个主要的原因在于它十分的简单,人们可以很容易地理解和使用它。每一个程序员都能轻易地看懂一个XML文件,理解它包含的内容。

.NET中包含了很多支持XML的类,这些类使得程序员使用XML编程就如同理解XML文件一样简单。在这篇文章中,我将给出这样的一个类的使用示例,这个类就是XmlTextWriter类。

XmlTextWriter类允许你将XML写到一个文件中去。这个类包含了很多方法和属性,使用这些属性和方法可以使你更容易地处理XML。为了使用这个类,你必须首先创建一个新的XmlTextWriter对象,然后你可以将XML片断加入到这个对象中。这个类中包含了不少的方法用于将各种类型的XML元素添加到XML文件中,下表给出了这些方法的名字和描述情况:

方法
描述

WriteStartDocument
书写版本为“1.0”的 XML 声明

WriteEndDocument
关闭任何打开的元素或属性

Close
关闭流

WriteDocType
写出具有指定名称和可选属性的 DOCTYPE 声明

WriteStartElement
写出指定的开始标记

WriteEndElement
关闭一个元素

WriteFullEndElement
关闭一个元素,并且总是写入完整的结束标记

WriteElementString
写出包含字符串值的元素

WriteStartAttribute
书写属性的起始内容

WriteEndAttribute
关闭上一个 WriteStartAttribute 调用

WriteRaw
手动书写原始标记

WriteString
书写一个字符串

WriteAttributeString
出具有指定值的属性

WriteCData
写出包含指定文本的 <![CDATA[...]]> 块

WriteComment
写出包含指定文本的注释 <!--...-->

WriteWhiteSpace
写出给定的空白

WriteProcessingInstruction
写出在名称和文本之间带有空格的处理指令,如下所示:<?name text?>

如果你对于XML十分熟悉,那么你一定能很好的理解上面的这些方法。下面我们将给出一个例子,在这个例子中,我们将先创建一个文档,添加一些元素,然后关闭这个文档。添加了元素后你还可以添加子元素,属性和其他内容。下面的代码就是这样的一个例子,它创建了一个文件名为title的XML文件。

using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlTextWriter writer = new XmlTextWriter("titles.xml", null);
//写入根元素
writer.WriteStartElement("items");
//加入子元素
writer.WriteElementString("title", "Unreal Tournament 2003");
writer.WriteElementString("title", "C&C: Renegade");
writer.WriteElementString("title", "Dr. Seuss‘s ABC");
//关闭根元素,并书写结束标签
writer.WriteEndElement();
//将XML写入文件并且关闭XmlTextWriter
writer.Close();
}
}
如果你编译并且执行上面的代码,你将创建这个XML文件,文件中包含如下内容:
<items>
<title>Unreal Tournament 2003</title>
<title>C&C: Renegade</title>
<title>Dr. Seuss‘s ABC</title>
</items>

上面的代码创建了一个名为writer的XmlTextWriter对象。当这个对象被创建时,它被关联到一个名为titles.xml的文件。接着,程序创建了一个叫做items的根属性,WriteStartElement方法创建了这个属性的开始标签。接下来,程序调用了 WriteElementString方法创建了三个子元素。从上面的代码你还可以看到,这个方法使用第一个参数(在上面的程序中是title)作为元素的标签;使用第二个参数作为元素的值。当你添加了所有的元素后,你需要关闭根元素。这时你可以调用WriteEndElement方法关闭那个最近被打开的元素;在本例中,这个最近被打开的元素就是根元素。当所有的数据都已经写好,根元素也已经关闭时,你可以将信息传送给你的XmlTextWriter。这意味着这时候你可以调用Close方法关闭它了。

上面的代码相对十分的简单,下面我们看一个使用了XmlTextWriter类中更多方法,功能更加完善的例子。

using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlTextWriter writer = new XmlTextWriter("myMedia.xml", null);
//使用自动缩进便于阅读
writer.Formatting = Formatting.Indented;
//书写根元素
writer.WriteStartElement("items");
//开始一个元素
writer.WriteStartElement("item");
//向先前创建的元素中添加一个属性
writer.WriteAttributeString("rating", "R");
//添加子元素
writer.WriteElementString("title", "The Matrix");
writer.WriteElementString("format", "DVD");
//关闭item元素
writer.WriteEndElement(); // 关闭元素
//在节点间添加一些空格
writer.WriteWhitespace("\n");
//使用原始字符串书写第二个元素
writer.WriteRaw("<item>" +
"<title>BloodWake</title>" +
"<format>XBox</format>" +
"</item>");
//使用格式化的字符串书写第三个元素
writer.WriteRaw("\n <item>\n" +
" <title>Unreal Tournament 2003</title>\n" +
" <format>CD</format>\n" +
" </item>\n");
// 关闭根元素
writer.WriteFullEndElement();
//将XML写入文件并关闭writer
writer.Close();
}
}
上面代码编译运行后将得到myMedia.xml文件,文件的内容为: <items>
<item rating="R">
<title>The Matrix</title>
<format>DVD</format>
</item>
<item>
<title>BloodWake</title>
<format>XBox</format>
</item>
<item>
<title>Unreal Tournament 2003</title>
<format>CD</format>
</item>
</items>
上面代码中的注释说明了这个程序的功能是如何实现的。需要记住的一件事是:当调用方法开始一个操作时,你需要在程序的合适的地方调用方法结束这个操作。例如,你调用了StartElement,你就必须调用EndElement关闭元素;当然在这两个调用之间你也可以加入一个子元素。无论你何时调用 EndElement方法,它总是关闭最近使用StartElement方法打开的那个元素(这和栈的工作方式很相似)。

使用XmlTextWriter十分的容易,不过我还是建议你自己动手试试这些代码和方法。你试过以后会发现这些代码能够很容易地集成到你的程序中。你还应该记住,XmlTextWriter仅仅是.NET提供的众多XML类中的一个。

2)
我用的是一种很笨的方法,但可以帮助初学者了解访问XML节点的过程。

已知有一个XML文件(bookstore.xml)如下:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon‘s Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
</bookstore>

1、往<bookstore>节点中插入一个<book>节点:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.AppendChild(xesub1);//添加到<book>节点中
XmlElement xesub2=xmlDoc.CreateElement("author");
xesub2.InnerText="候捷";
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("price");
xesub3.InnerText="58.3";
xe1.AppendChild(xesub3);

root.AppendChild(xe1);//添加到<bookstore>节点中
xmlDoc.Save("bookstore.xml");
//===============================================
结果为:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon‘s Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</book>
</bookstore>

2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach(XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
{
xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach(XmlNode xn1 in nls)//遍历
{
XmlElement xe2=(XmlElement)xn1;//转换类型
if(xe2.Name=="author")//如果找到
{
xe2.InnerText="亚胜";//则修改
break;//找到退出来就可以了
}
}
break;
}
}

xmlDoc.Save("bookstore.xml");//保存。
//==================================================
最后结果为:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon‘s Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="update李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>亚胜</author>
<price>58.3</price>
</book>
</bookstore>

3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
if(xe.GetAttribute("genre")=="fantasy")
{
xe.RemoveAttribute("genre");//删除genre属性
}
else if(xe.GetAttribute("genre")=="update李赞红")
{
xe.RemoveAll();//删除该节点的全部内容
}
}
xmlDoc.Save("bookstore.xml");
//===========================================
最后结果为:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book ISBN="2-3631-4">
<title>Oberon‘s Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book>
</book>
</bookstore>

4、显示所有数据。
XmlNode xn=xmlDoc.SelectSingleNode("bookstore");

XmlNodeList xnl=xn.ChildNodes;

foreach(XmlNode xnf in xnl)
{
XmlElement xe=(XmlElement)xnf;
Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
Console.WriteLine(xe.GetAttribute("ISBN"));

XmlNodeList xnf1=xe.ChildNodes;
foreach(XmlNode xn2 in xnf1)
{
Console.WriteLine(xn2.InnerText);//显示子节点点文本
}
}

热心网友 时间:2022-05-05 02:29

在ASP.NET2.0里不但进一步扩展了配置文件web.config,更为重要的是系统提供了一组API函数,让我们可以以编程的方式从配置文件里提取信息
首先,先看看如果从web.config里提取appSettings里的配置值,示例代码如下:
key="pagetitle" value="Job Site Starter Kit (Ver.1.0)">
key="sitelogo" value="logo.gif">
key="advertiseemail" value="sales@somesite.com">

利用ASP.NET2.0提供的一组API函数,您可以很容易的获取AppSettingsSection里所有的Keys/value组对,如下:

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
AppSettingsSection appSettings = (AppSettingsSection) config.GetSection("appSettings");
string[] appKeys = appSettings.Settings.AllKeys;

for (int j = 0; j < appSettings.Settings.Count; j++)
{
//这里只进行简单的输出
Response.Write(appSettings.Settings[appKeys[j]].Value);
Response.Write("");
}

上面代码只是进行简单的输出所有Key的value值,然而,你可能想获取的仅仅是某一个key的值,这也非常简单,如下:

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
string pateTitle= appSettings.Settings["pagetitle"].Value; //获取key为patetitle的value值
string siteLogo= appSettings.Settings["siteLogo"].Value; //获取key为sitelogo的value值

对于数据库连接字符串,在ASP.NET2.0里提供了专门的配置节如下:
name="connectionstring"
connectionString="Data Source=SQLEXPRESS;AttachDbFilename=JsskDb.mdf; … .."/>
name="MyProviderConnectionString"
connectionString="Data Source=SQLEXPRESS;Integrated Security=True; … …"/>

这样我们很容易获取数据库连接字符串如下:

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConnectionStringsSection conSection = (ConnectionStringsSection)config.GetSection("connectionstring ");
ConnectionStringSettingsCollection conCollection = conSection.ConnectionStrings;

foreach (ConnectionStringSettings conSetting in conCollection)
{
Response.Write(conSetting.ConnectionString);
Response.Write("");
}

另外,利用API函数,你同时还可以在代码里更改web.config数据库连接的配置的值,如下

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConnectionStringsSection conSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
conSection.ConnectionStrings["SQLConnectionString"].ConnectionString = "Data Source=SQLEXPRESS;Integrated Security=True; … …";
config.Save();

这里最有意思的可能就是类的转换,在里,使用的是AppSettingsSection类,在 connectionStrings>里使用的的是ConnectionStringsSection类,事实上,ASP.NET2.0提供的一组函数都是“配置节名+Section”的形式提供的类。

在ASP.NET官方网站曾经对此专门介绍,可以找不到该文件了。
在ASP.NET2.0里提供了两种方式对数据库连接字符串加密,一种是使用asp_regii命令,一种是通过代码,下面显示的是通过代码方式对数据库连接字符串加密,代码如下:

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection configSection = config.GetSection("connectionStrings");

if (configSection.SectionInformation.IsProtected)
{
//如果已经加密,就不用再加密了
configSection.SectionInformation.UnprotectSection();
config.Save();
}
else
{
configSection.SectionInformation.ProtectSection ("DataProtectionConfigurationProvider");
config.Save();
}

修改appSettings中某个键值的方法:

public static void writeConfig(string item, string key, string value)
{
if (item == "")
{
item = "appSettings";
}
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.HttpContext.Current.Request.ApplicationPath);
AppSettingsSection appSection = (AppSettingsSection)config.GetSection(item);
if (appSection.Settings[key] == null)
{
appSection.Settings.Add(key, value);
config.Save();
}
else
{
appSection.Settings.Remove(key);
appSection.Settings.Add(key, value);
config.Save();
}
}

热心网友 时间:2022-05-05 04:04

你可以百度hi联系我,可以详细的跟你解释下
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
火影忍者手游怎么都有蛤蟆仙人了 我只是忘了忘记你图书目录 我只是忘了忘记你作者简介 我只是忘了忘记你内容简介 对《我只是忘了忘记你》进行评价! 多肉有什么作用和功效 多肉的好处 多肉植物的好处和坏处没毒的多肉植物有哪些 大学生创业哪些要素最关键优秀团队和心理素质 大学生创业的关键要素 沈阳市于洪区沙岭镇去道义开发区做什么车 qq群相册打不开 为什么QQ空间群空间 群相册都打不开 为什么QQ群相册打不开 支付宝转账给好友限额 为什么我的支付宝转账限额1万 我的普通话证是2000年的,能不能通过教师资格认定 2000年前上海技术师范大学毕业生怎么申请教师资格证 我是2000年毕业的师范生,教委发教师资格证时,我们几个同学没接到通知,也有接到通知的 我干了几 2000年6月份教资认定有效期 考教师资格证查不到2000毕业的学历怎么办 ThinkPad New X1 Carbon(20A7S00100) 如何内置3G模块 关于thinkpad x1 carbon 2000年河北省高级教师资格证冀职改办字号是多少 联想X1 Carbon背后自带的3G卡槽加模块要多少钱 2000年教师资格证现在过期没有 我的是联想thinkpad x1carbon,是i7版的,自带内置3G模块吗,怎么使用啊,我装了驱动插卡后没反应啊 thinkpadt430S预留升级的3G上网模块位置,是否可以安装4G上网模块? 请问ThinkPad X1 Carbon,如何确认3G模块已经安装? 超薄笔记本推荐品牌thinkpad x1 ThinkPadX1 Carbon 有4G上网卡插口和TF卡插口吗 为什么我的的电脑打不开群主页群相册别的电脑就可以QQ空间和邮箱就可以打开,在QQ的面板上点的。 为什么有些工商银行支付宝转账的限额是单笔5000元,有些则是1万元? 为什么我的QQ在我的电脑上进不了群共享和群相册? 我的QQ空间和群相册打不开怎么办??? 杭州意法女装多久解封 最近百度贴吧送会员是怎么一回事? 腌得不咸的肉能放在冰箱里吗?多久会坏? 杭州意法服饰城的市场历程 怎么降苹果的系统 杭州意法服饰城有限公司怎么样? 杭州意法服饰城作息时间 喜怒哀乐心情描写好段 ps4最终幻想15瀑布洞窟怎么进 上海作业七年级数学题 ps4最终幻想15第3章瀑布洞窟怎么进 数学《上海作业》七年级上P63-64 《最终幻想15》多罗鲁洞穴迷宫怎么进入方法介绍 七年级数学上海作业(上)p54第五大题第3小题怎么做 最终幻想15多罗鲁洞穴迷宫怎么进 上海作业初一年级分式的加减(2)一道数学题,望大虾解答。