1.说明
由于最近工作比较忙很长时间没有写文章了,最近在项目中使用Settings.settings时遇见了一些问题,故作记录,希望各位大神指点。
2.Settings.settings说明
Settings.settings结构如上图,在Settings.settings中添加节点时Settings.Designer.cs自动生成该节点的属性,App.config自动生成节点信息。
3.使用方式介绍
private void button1_Click(object sender, EventArgs e)
{
RefreshLabel();
}
private void RefreshLabel()
{
label1.Text = "UserSave:" + Settings.Default.UserSave;
label2.Text = "User:" + Settings.Default.User;
label3.Text = "Application:" + Settings.Default.Application;
Settings.Default.UserSave = "2";
Settings.Default.User = "2";
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Settings.Default.Save();
}
4.属性介绍
名称:自定义节点名称,使用 Settings.Default.名称 获取或修改该节点的值
类型:设置节点的类型,获取或修改该节点的值必须使用相同的数据类型;
范围:包含用户和应用程序(后续单独说明);
值:可设置初始值;
5.属性-范围
范围包含了用户和应用程序
(1)用户节点
1.允许修改节点值;
2.修改节点的值仅在程序本次运行时生效,下次运行需要使用程序的默认值则不能调用
Settings.Default.Save();
3.修改节点的值需要在程序下次运行使用必须调用
Settings.Default.Save();
Settings.Default.Save(); 介绍
1.如果节点设置为用户,并且调用了Save()方法,会在C:\Users\Administrator\AppData\Local\项目名称\对应版本\1.0.0.0\user.config的文件中存储修改后的节点的值;
项目名称:当前运行的项目的名称
对应版本:共四种,包含:开发环境中启动的Debug、Release以及在Debug或Release中直接执行程序的.exe(可执行文件);
2.若未调用Save()方法,user.config不会生成或修改;
3.调用Save()方法时,仅保存调用前修改过所有节点的值,调用后修改的值不会改变,修改后节点在exe.config、vshost.exe.config不会显示修改后的值
4.建议在程序退出时,调用Save()方法;若仅需要节点在本次调用修改有效,则不能调用Save(),防止程序出现不可估计的错误;
5.若不仅包含了启动本次修改有效节点,还包含了修改后下次启动仍有效节点,建议在Settings.settings中添加用户节点,但是不能在程序调用Save方法,再配合使用Configuration使用。
(2)应用程序节点
1.节点的值不允许在程序中修改;
2.不会在C:\Users\Administrator\AppData\Local\项目名称\对应版本\1.0.0.0\user.config生成节点;
3.在app.config、exe.config、vshost.exe.config中生成节点
6.Configuration说明
在app.config添加节点,会在exe.config、vshost.exe.config中生成节点;
#region ConfigurationManager使用说明
// 想调用ConfigurationManager必须要先在工程里添加system.configuration程序集的引用
// 在引用点击右键选择添加引用,搜索Config就会找到
#endregion
using System;
using System.Configuration;
using System.Xml;
/******************************************************
* 模块作者: zheng
* 创建时间: 2021/6/27 20:18:15
* 功能描述: 1.用于对Winform端对EXE.config或操作vshost.exe.config文件的读写;
* 2.修改构造函数中初始化对象改变操作对象。
* 使用说明: 1.右击引用,添加System.Configuration;
* 2.使用该类时需要修改命名空间;
* 3.使用前建议向app.config添加节点,节点示例:
* <appSettings file="">
* <add key="光源连接端口" value="com1" />
* <add key="COM1" value="COM1,9600,8,None,1,已启用" />
* </appSettings>
*******************************************************/
namespace MicroscaleMeasure.Utils
{
class AppConfigUtil
{
/// <summary>
/// 管理配置文件对象
/// </summary>
private static readonly Configuration MConfig;
static AppConfigUtil()
{
//1.操作vshost.exe.config
//MConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//2.操作exe.config
var file = System.Windows.Forms.Application.ExecutablePath;
MConfig = ConfigurationManager.OpenExeConfiguration(file);
}
/// <summary>
/// 获取AppSettings中某一节点值
/// </summary>
/// <param name="key">节点名称</param>
public static string GetConfigValue(string key)
{
if (MConfig.AppSettings.Settings[key] != null)
return MConfig.AppSettings.Settings[key].Value;
else
return string.Empty;
}
/// <summary>
/// 修改配置文件,若节点不存在则添加节点
/// </summary>
/// <param name="aKey">需要修改的节点名称</param>
/// <param name="aValue">需要修改的节点的值</param>
public static void UpdateAppSettings(string aKey, string aValue)
{
if (MConfig.AppSettings.Settings[aKey] != null)
MConfig.AppSettings.Settings[aKey].Value = aValue;// 修改
else
{
var ass = (AppSettingsSection)MConfig.GetSection("appSettings");
ass.Settings.Add(aKey, aValue);// 添加
}
MConfig.Save(ConfigurationSaveMode.Modified);// 保存修改
ConfigurationManager.RefreshSection("appSettings");// 强制重新载入配置文件的连接配置
}
}
}