C# AppSettings使用

本文介绍如何使用C#的AppConfigHelper类库高效管理应用程序配置,包括读取不同数据类型的AppSetting,以及修改App.config文件中的配置。通过实例演示了如何通过代码访问和设置AppSettings,并强调了配置文件与可执行程序名称的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为C#参数配置读取,必不可少的就需要用到System.Configuration类库,之前经常手动配置App.Config进行参数配置,然后使用

ConfigurationManager.AppSettings[appSettingKey];

来进行参数配置读取,其实这个类和INI文件类似,也是可以进行创建的,写入初始值的,AppConfigHelper见下面代码,注意:编译完成后的.Config文件名称需要跟可执行程序名称一致,否者读取不到对应的参数值

    /// <summary>
    /// 应用程序配置文件访问辅助类
    /// </summary>
    public class AppConfigHelper
    {
        /// <summary>
        /// 读取string配置项
        /// </summary>
        /// <param name="appSettingKey">AppSetting配置项的Key值</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns>返回对应配置项的string类型value值</returns>
        public static string GetAppSettingValue(string appSettingKey, string defaultValue)
        {
            string result = ConfigurationManager.AppSettings[appSettingKey];
            if (String.IsNullOrEmpty(result))
            {
                return defaultValue;
            }
            return result;
        }

        /// <summary>
        /// 读取bool配置项
        /// </summary>
        /// <param name="appSettingKey">AppSetting配置项的Key值</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns>返回对应配置项的bool类型value值</returns>
        public static bool GetAppSettingValue(string appSettingKey, bool defaultValue)
        {
            string result = ConfigurationManager.AppSettings[appSettingKey];
            if (String.IsNullOrEmpty(result))
            {
                return defaultValue;
            }
            bool boolResult = false;
            if (bool.TryParse(result, out boolResult))
            {
                return boolResult;
            }
            else
            {
                return defaultValue;
            }
        }

        /// <summary>
        /// 读取int配置项
        /// </summary>
        /// <param name="appSettingKey">AppSetting配置项的Key值</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns>返回对应配置项的int类型value值</returns>
        public static int GetAppSettingValue(string appSettingKey, int defaultValue)
        {
            string result = ConfigurationManager.AppSettings[appSettingKey];
            if (String.IsNullOrEmpty(result))
            {
                return defaultValue;
            }
            int intResult = 0;
            if (int.TryParse(result, out intResult))
            {
                return intResult;
            }
            else
            {
                return defaultValue;
            }
        }

        /// <summary>
        /// 读取double类型配置项
        /// </summary>
        /// <param name="appSettingKey">AppSetting配置项的Key值</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns>返回对应配置项的double类型value值</returns>
        public static double GetAppSettingValue(string appSettingKey, double defaultValue)
        {
            string result = ConfigurationManager.AppSettings[appSettingKey];
            if (String.IsNullOrEmpty(result))
            {
                return defaultValue;
            }
            double doubleResult = 0.0;
            if (double.TryParse(result, out doubleResult))
            {
                return doubleResult;
            }
            else
            {
                return defaultValue;
            }
        }

        /// <summary>
        /// 修改App.config中AppSetttings中的配置项
        /// </summary>
        /// <param name="name">要修改的配置项的名称</param>
        /// <param name="value">要修改的配置项的值</param>
        /// <returns></returns>
        public static bool SetAppSettings(string name, string value, bool _ismodify = false)
        {
            try
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);//当前应用程序的配置文件
                if (config != null)
                {
                    AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
                    if (appSettings.Settings.AllKeys.Contains(name))
                    {
                        if (_ismodify)
                            appSettings.Settings[name].Value = value;
                    }
                    else
                    {
                        appSettings.Settings.Add(name, value);
                    }
                    config.Save(); //保存配置文件
                    return true;
                }
                return false;
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("修改app.config配置{0}的值为{1}异常:{2}", name, value, ex.Message));
                return false;
            }
        }

<think>我们被要求解释C#AppSettings的作用及使用方法。根据引用内容,AppSettings主要用于存储应用程序的配置信息,如数据库连接字符串、应用程序参数等。这些配置信息通常以键值对的形式存储在配置文件中(如App.config或Web.config),并且可以在运行时被应用程序读取或修改。 作用: 1. 存储配置信息:将应用程序的设置与代码分离,便于修改而不需要重新编译。 2. 支持不同环境:可以为开发、测试和生产环境使用不同的配置。 3. 易于访问:通过ConfigurationManager类可以轻松读取配置。 使用方法: 一、在配置文件中定义AppSettings 在App.config(WinForm、控制台)或Web.config(Web应用)的<configuration>节点下添加<appSettings>节,并添加键值对。 示例(引用[2]): ```xml <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="name" value="张三" /> <add key="age" value="10" /> </appSettings> </configuration> ``` 二、读取AppSettings 使用System.Configuration.ConfigurationManager.AppSettings来读取配置值。 示例(引用[3]): ```csharp string name = ConfigurationManager.AppSettings["name"]; int age = int.Parse(ConfigurationManager.AppSettings["age"]); ``` 三、修改AppSettings(运行时) 注意:修改配置文件通常只影响当前运行的配置文件(即bin目录下的.exe.config文件),而不会修改项目中的App.config文件。 步骤(引用[3]): 1. 打开配置文件(使用OpenExeConfiguration方法) 2. 修改AppSettings中的键值 3. 保存配置 4. 刷新配置节(以便下次读取时获取最新值) 示例代码: ```csharp // 读取当前配置 var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // 修改AppSettings中的值 config.AppSettings.Settings["token"].Value = "newValue"; // 保存 config.Save(ConfigurationSaveMode.Modified); // 刷新 ConfigurationManager.RefreshSection("appSettings"); ``` 注意事项: 1. 在调试模式下(通过VS运行),修改的是项目输出目录(如bin\Debug)下的.config文件,而不是项目中的源配置文件(App.config)。 2. 需要引用System.Configuration程序集(在项目中添加对System.Configuration.dll的引用)。 3. 修改配置文件需要应用程序有足够的权限(例如,在ASP.NET中可能需要更高的权限)。 四、.NET Core中的AppSettings.json 在.NET Core中,配置通常存储在appsettings.json文件中,通过IConfiguration接口访问(引用[1]和[4])。 示例(appsettings.json): ```json { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning" } }, "DBConnStr": { "Redis": "192.168.1.69:6379", "WorkerId": 1 } } ``` 读取方法(在.NET Core中): 1. 在Startup中注入IConfiguration 2. 通过IConfiguration获取值 示例(引用[1]): ```csharp public class HomeController : Controller { private AppSettings AppSettings { get; set; } public HomeController(IOptions<AppSettings> settings) { AppSettings = settings.Value; } } ``` 或者直接通过IConfiguration: ```csharp public class MyService { private readonly IConfiguration _config; public MyService(IConfiguration config) { _config = config; } public void SomeMethod() { var redisConn = _config.GetSection("DBConnStr:Redis").Value; } } ``` 总结: - 传统.NET Framework使用App.config/Web.config中的<appSettings>,通过ConfigurationManager读取。 - .NET Core使用appsettings.json,通过IConfiguration读取。 - 修改运行时配置需注意权限和文件位置。 相关问题: 1. 如何在不同环境下(开发、生产)使用不同的AppSettings配置? 2. 在.NET Core中如何实现AppSettings的修改和保存? 3. 如何加密AppSettings中的敏感信息? 4. 在C#中读取AppSettings时如何处理类型转换? 5. 如何为自定义配置节创建强类型类(如引用[1]中的AppSettings)?</think>### C# AppSettings 的作用及使用方法 #### 一、AppSettings 的作用 **AppSettings** 是 C# 应用程序中用于存储配置信息的标准化机制,主要作用包括: 1. **解耦配置与代码** 将数据库连接字符串、API密钥、功能开关等配置与代码分离[^2][^3] 2. **环境适配** 支持为不同环境(开发/测试/生产)提供不同配置[^4] 3. **运行时修改** 允许在不重新编译程序的情况下动态调整配置[^3] 4. **统一管理** 集中管理分散的配置参数,提高可维护性[^2] #### 二、使用方法(以 WinForm 为例) ##### 1. 添加配置文件 在项目中添加 `App.config`(.NET Framework)或 `appsettings.json`(.NET Core+): ```xml <!-- .NET Framework 的 App.config --> <configuration> <appSettings> <add key="ApiEndpoint" value="https://api.example.com"/> <add key="MaxRetries" value="3"/> <add key="EnableLogging" value="true"/> </appSettings> </configuration> ``` ```json // .NET Core+ 的 appsettings.json { "AppSettings": { "ApiEndpoint": "https://api.example.com", "MaxRetries": 3, "EnableLogging": true } } ``` ##### 2. 读取配置 **.NET Framework 读取方式:** ```csharp using System.Configuration; // 读取字符串 string endpoint = ConfigurationManager.AppSettings["ApiEndpoint"]; // 读取数值(需转换) int maxRetries = int.Parse(ConfigurationManager.AppSettings["MaxRetries"]); // 读取布尔值 bool loggingEnabled = bool.Parse(ConfigurationManager.AppSettings["EnableLogging"]); ``` **.NET Core+ 读取方式:** ```csharp // Program.cs 注入配置 var builder = WebApplication.CreateBuilder(args); var appSettings = builder.Configuration.GetSection("AppSettings"); // 窗体中读取 public partial class MainForm : Form { private readonly IConfiguration _config; public MainForm(IConfiguration config) { _config = config; InitializeComponent(); string endpoint = _config["AppSettings:ApiEndpoint"]; int retries = _config.GetValue<int>("AppSettings:MaxRetries"); } } ``` ##### 3. 修改配置(运行时) ```csharp // 获取配置文件对象 var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // 修改值 config.AppSettings.Settings["MaxRetries"].Value = "5"; // 保存更改 config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); ``` > ⚠️ **重要注意事项** > 运行时修改的是 `bin` 目录下的 `YourApp.exe.config` 文件,而非项目中的源配置文件[^3] #### 三、最佳实践 1. **强类型配置**(推荐) ```csharp public class AppConfig { public string ApiEndpoint { get; set; } public int MaxRetries { get; set; } public bool EnableLogging { get; set; } } // 注册服务(.NET Core) builder.Services.Configure<AppConfig>(builder.Configuration.GetSection("AppSettings")); // 注入使用 public MainForm(IOptions<AppConfig> config) { _config = config.Value; Console.WriteLine(_config.ApiEndpoint); } ``` 2. **环境区分配置** - 创建 `appsettings.Development.json` - 创建 `appsettings.Production.json` - 框架自动根据环境变量加载对应配置 3. **敏感数据保护** - 使用 `dotnet user-secrets` 管理开发环境密钥 - 生产环境使用 Azure Key Vault 或环境变量 #### 四、配置源对比 | 配置方式 | 适用框架 | 动态更新 | 结构化支持 | |----------------|-------------|---------|-----------| | App.config | .NET Framework | ✓ | ✗ | | appsettings.json | .NET Core+ | ✓ | ✓ | | 环境变量 | 全平台 | ✗ | ✗ | | 数据库配置 | 全平台 | ✓ | ✓ | > 引用说明: > XML 配置示例参考自传统 .NET 实现[^2][^3] > JSON 配置和依赖注入示例参考 .NET Core 实践[^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冀石程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值