C#配置文件读写全攻略:AppSettings与ConnectionStrings操作详解

10 次阅读

C#应用程序开发过程中,配置文件承担着保存运行参数、数据库连接信息、环境变量等重要职责。合理使用配置文件可以降低代码与环境配置的耦合,提高程序维护效率。C#中常见的配置文件操作主要围绕AppSettings和ConnectionStrings两个配置节点展开,它们分别用于存储普通应用参数和数据库连接字符串。

本文将详细介绍C#配置文件的结构、AppSettings读写方式、ConnectionStrings读取方法、动态修改配置文件的实现方式,以及实际项目中的使用技巧。

C#配置文件基础结构介绍

传统.NET Framework项目通常使用App.config或Web.config作为配置文件,程序运行后会自动转换为对应的配置文件,例如:

  • 桌面应用程序:App.config → xxx.exe.config

  • ASP.NET应用程序:Web.config

一个典型配置文件结构如下:

XML



  
     key="ApiUrl" value="https://api.example.com" />
     key="MaxCount" value="100" />
  

  
     name="DefaultConnection"
         connectionString="Server=localhost;Database=TestDB;User Id=sa;Password=123456;"
         providerName="System.Data.SqlClient" />
  

其中:

  • appSettings用于保存普通键值配置。

  • connectionStrings专门用于数据库连接信息管理。

  • configuration是整个配置文件的根节点。

两者虽然都是保存字符串数据,但设计目的不同,实际开发中应根据用途选择。

AppSettings配置读取方法

AppSettings主要用于保存系统运行参数,例如:

  • 接口地址

  • 文件路径

  • 系统开关

  • 默认参数

  • 程序版本信息

使用ConfigurationManager读取AppSettings

首先需要引用程序集:

C#
using System.Configuration;

读取配置:

C#
string apiUrl = ConfigurationManager.AppSettings["ApiUrl"];

Console.WriteLine(apiUrl);

如果配置文件中存在:

XML

   key="ApiUrl" value="https://api.example.com" />

输出结果:

https://api.example.com

这种方式简单直观,也是最常见的AppSettings读取方式。

AppSettings读取多个配置项

实际项目中通常存在多个配置参数,可以封装读取方法:

C#
public static string GetAppSetting(string key)
{
    return ConfigurationManager.AppSettings[key];
}

调用:

C#
string url = GetAppSetting("ApiUrl");
string count = GetAppSetting("MaxCount");

这样可以统一管理配置访问逻辑,方便后期扩展。

AppSettings配置值类型转换

配置文件中的value本质上都是字符串,例如:

XML
 key="MaxCount" value="100"/>

读取后需要转换:

C#
int maxCount = int.Parse(
    ConfigurationManager.AppSettings["MaxCount"]
);

更安全的写法:

C#
int maxCount;

bool result = int.TryParse(
    ConfigurationManager.AppSettings["MaxCount"],
    out maxCount
);

避免配置错误导致程序异常。

ConnectionStrings读取数据库连接

数据库连接字符串不建议放入appSettings,而应该使用connectionStrings节点。

配置示例:

XML

   name="MyDatabase"
       connectionString="Server=.;Database=Demo;Integrated Security=True;"
       providerName="System.Data.SqlClient"/>

读取方式:

C#
string conn =
    ConfigurationManager.ConnectionStrings["MyDatabase"]
    .ConnectionString;

返回:

Server=.;Database=Demo;Integrated Security=True;

ConnectionStrings与AppSettings区别

虽然两者都可以保存字符串,但用途存在明显区别。

对比项AppSettingsConnectionStrings
主要用途普通配置参数数据库连接
节点名称appSettingsconnectionStrings
访问方式AppSettings[key]ConnectionStrings[name]
安全管理较弱支持加密保护
典型数据接口地址、路径数据库连接信息

实际开发建议:

  • 普通业务配置使用AppSettings。

  • 数据库相关配置使用ConnectionStrings。

这样可以让项目结构更加清晰。

修改AppSettings配置文件

读取配置比较简单,但很多开发场景需要动态修改配置,例如:

  • 修改服务器地址

  • 更新程序运行参数

  • 保存用户配置

可以通过Configuration对象实现。

示例:

C#
Configuration config =
    ConfigurationManager.OpenExeConfiguration(
        ConfigurationUserLevel.None
    );

config.AppSettings.Settings["ApiUrl"].Value =
    "https://newapi.example.com";

config.Save();

ConfigurationManager.RefreshSection("appSettings");

修改完成后重新加载配置:

C#
string url =
    ConfigurationManager.AppSettings["ApiUrl"];

即可获取新的值。

修改ConnectionStrings连接配置

ConnectionStrings修改方式类似:

C#
Configuration config =
    ConfigurationManager.OpenExeConfiguration(
        ConfigurationUserLevel.None
    );

config.ConnectionStrings.ConnectionStrings["MyDatabase"]
    .ConnectionString =
    "Server=newserver;Database=NewDB;Integrated Security=True;";

config.Save();

修改后程序下一次读取即可使用新的连接信息。

配置文件加密保护

数据库连接字符串通常包含账号密码,直接明文保存存在安全风险。

.NET提供了配置节加密功能。

加密connectionStrings:

C#
Configuration config =
    ConfigurationManager.OpenExeConfiguration(
        ConfigurationUserLevel.None
    );

ConfigurationSection section =
    config.GetSection("connectionStrings");

section.SectionInformation.ProtectSection(
    "DataProtectionConfigurationProvider"
);

section.SectionInformation.ForceSave = true;

config.Save();

加密后配置文件中的连接字符串会变成密文。

解密读取时:

C#
string conn =
ConfigurationManager.ConnectionStrings["MyDatabase"]
.ConnectionString;

程序仍然可以正常访问。

C#配置文件路径问题

很多开发者在修改配置文件时会遇到:

  • 修改后没有生效

  • 找不到配置文件

  • 读取的是旧值

原因通常是程序运行时读取的是生成目录中的配置文件。

例如:

项目:

MyApp
 └── App.config

编译后:

bin
 └── Debug
     └── MyApp.exe.config

程序实际读取的是:

MyApp.exe.config

而不是项目中的App.config。

因此调试时需要注意:

  • 修改配置后重新生成项目。

  • 检查bin目录中的配置文件。

  • 使用RefreshSection刷新缓存。

.NET Core和.NET 5+中的配置方式变化

传统ConfigurationManager主要用于.NET Framework。

.NET Core及.NET 5以后推荐使用IConfiguration体系。

配置文件通常为:

appsettings.json

示例:

JSON
{
  "ConnectionStrings": {
    "DefaultConnection":
    "Server=localhost;Database=test;"
  },

  "AppSettings": {
    "ApiUrl":
    "https://api.example.com"
  }
}

读取:

C#
var url =
configuration["AppSettings:ApiUrl"];

var conn =
configuration.GetConnectionString(
"DefaultConnection"
);

现代.NET项目更加推荐这种方式,因为它支持:

  • 多环境配置

  • 依赖注入

  • 配置热更新

  • 云部署场景

配置文件实际开发建议

1. 避免硬编码配置

错误方式:

C#
string url =
"https://api.example.com";

推荐:

C#
string url =
ConfigurationManager.AppSettings["ApiUrl"];

方便不同环境切换。

2. 配置项命名规范化

建议:

XML
 key="Service.ApiUrl" value="xxx"/>
 key="Service.Timeout" value="30"/>

使用模块化命名,便于管理。

3. 对重要配置增加默认值

读取配置时不要直接假设一定存在:

C#
string value =
ConfigurationManager.AppSettings["Timeout"]
?? "30";

避免配置缺失导致异常。

4. 不在代码中保存敏感信息

例如:

  • 数据库密码

  • API密钥

  • Token

应该使用:

  • 配置加密

  • 环境变量

  • 密钥管理服务

提高系统安全性。

常见问题排查

读取配置返回null

可能原因:

  1. key名称错误:

XML
 key="ApiUrl" value="xxx"/>

代码:

C#
AppSettings["apiurl"]

大小写不一致。

  1. 配置文件位置错误。

  2. 配置未复制到输出目录。


修改配置后没有变化

检查:

  • 是否调用config.Save()

  • 是否刷新配置节

  • 是否修改的是运行目录配置文件


ConnectionStrings读取失败

确认:

XML

节点名称正确,并且读取代码:

C#
ConfigurationManager.ConnectionStrings["名称"]

中的名称与name属性完全一致。

总结

C#配置文件读写是企业级应用开发中的基础能力。AppSettings适合保存普通业务参数,而ConnectionStrings更适合管理数据库连接信息。通过ConfigurationManager可以方便完成配置读取、修改和加密操作。

对于传统.NET Framework项目,应熟练掌握App.config和Web.config中的配置管理方式;对于.NET Core及更高版本项目,则建议采用appsettings.json结合IConfiguration的现代配置体系。

合理设计配置结构,不仅能够提升代码维护性,还能增强系统部署灵活性和安全性,是C#项目开发中不可忽视的重要实践。