平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#读取App.config配置参数的实践教程与示例”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
介绍
在这个场景下,系统在开发时,可能需设置默认参数,比如数据库的链接参数,某个参数的默认数据等等。对于这些数据,可直接在app.config中读取。
在读写时,需先了解configurationmanager类。
命名空间:System.Configuration 程序集: System.Configuration.dll
此类的作用为提供对客户端应用程序设置文件的访问。 此类不能被继承。
| 属性 | 描述 |
|---|---|
| AppSettings | 拿到当前应用程序默认设置的AppSettingSection数据 |
| ConnectionStrings | 拿到当前应用程序默认设置的AppSettingSection数据 |
| 方法 | 描述 |
| GetSection | 检索当前应用程序默认设置的指定设置节 |
| OpenExeConfiguration | 检索当前应用程序默认设置的指定设置节 |
| OpenMachineConfiguration | 将当前计算机的设置文件作为 Configuration 对象打开。 |
| OpenMappedExeConfiguration | 将当前计算机的设置文件作为 Configuration 对象打开。 |
| OpenMappedMachineConfiguration | 落到代码里,将计算机设置文件作为 Configuration对象打开,该对象采用指定的文件映射。 |
| RefreshSection | 刷新命名节,这样在下次检索它时将从磁盘重新读取它。 |
程序Demo
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace demo132_APP.config的读写
{
class Program
{
static void Main(string[] args)
{
ReadAllSetting();
ReadSetting("a");
ReadSql();
Console.ReadKey();
//使用connectionStrings,常用于设置数据库链接参数
}
static void ReadAllSetting()
{
//读取App.config中Appsettingsection数据
try
{
var appsettings = ConfigurationManager.AppSettings;
if(appsettings.Count==0)
{
Console.WriteLine("AppSetting is empty");
}
else
{
foreach(var key in appsettings.AllKeys)
{
Console.WriteLine("Key:{0},Value:{1}", key, appsettings[key]);
}
}
}
catch(ConfigurationErrorsException)
{
Console.WriteLine("Error Reading Appsettings");
}
}
static void ReadSetting(string key)
{
//根据key值,读取appsettings中的值
try
{
var appsetting = ConfigurationManager.AppSettings;
string result = appsetting[key] ?? "Not Found";//??代表当appsetting为null时,result为Not Found,否则为appsetting[key]
Console.WriteLine(result);
}
catch(ConfigurationErrorsException)
{
Console.WriteLine("Error reading Appsetting");
}
}
static void AddUpdateSettings(string key,string value)
{
try
{
var configfile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var settings = configfile.AppSettings.Settings;
if(settings[key]==null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configfile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configfile.AppSettings.SectionInformation.Name);
}
catch(ConfigurationErrorsException)
{
Console.WriteLine("Error reading in Appsettings");
}
}
static void ReadSql()
{
try
{
var sqlcon = ConfigurationManager.ConnectionStrings["Sqlcon"].ConnectionString;
if(sqlcon != null)
{
Console.WriteLine(sqlcon.ToString());
}
else
{
Console.WriteLine("Nothing");
}
}
catch(ConfigurationErrorsException)
{
Console.WriteLine("Error in connectionstring");
}
}
}
}
常用错误
采用App.config设置参数,读取参数出现错误
实际处理时,“System.Configuration.ConfigurationErrorsException”类型的未经处理的异常在 System.Configuration.dll 中发生。其他信息: 设置系统未能初始化
解决办法:
在这个场景下,若设置文件中包含 configSections 元素,则 configSections 元素必须是 configuration 元素的第一个子元素。",将appSettings放到configSections 后,则正常。

总结
落到代码里,总的来说,C#读取App.config适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。