Raysoft.Framework.Config.ConfigHelper

本文介绍了一个配置文件管理器,能够对C#、ASP.NET项目的app.config和web.config文件中的[appSettings]和[connectionStrings]节点进行读取、更新、新增和删除操作。
//==============================================
// FileName: ConfigManager
// Description: 静态方法业务类,用于对C#、ASP.NET
// 中的WinForm & WebForm 项目程序配置文件
// app.config和web.config的[appSettings]和
// [connectionStrings]节点进行新增、修改、删
// 除和读取相关的操作。
// 
// 使用注意事项:
// 1、项目中必须有App.Config 文件
// 2、执行目录中.Config 文件中必须有“appSettings”节点
// 3、只更新执行目录.Config 文件
//==============================================

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Windows;
using System.Windows.Forms;


namespace Raysoft.Framework.Config
{

    public enum ConfigurationFile
    {
        AppConfig = 1,
        WebConfig = 2
    }
    /// <summary>
    /// ConfigHelper 应用程序配置文件管理器
    /// </summary>
    public class ConfigHelper
    {
        public ConfigHelper()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        /// <summary>
        /// 对[appSettings]节点依据Key值读取到Value值,返回字符串
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="key">要读取的Key值</param>
        /// <returns>返回Value值的字符串</returns>
        public static string ReadValueByKey(ConfigurationFile configurationFile, string key)
        {
            string value = string.Empty;
            string filename = string.Empty;
            if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())
            {
                filename = Application.ExecutablePath  + ".config";
            }
            else
            {
                filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";
            }

            XmlDocument doc = new XmlDocument();
            doc.Load(filename); //加载配置文件
            XmlNode node = doc.SelectSingleNode("//appSettings");   //得到[appSettings]节点
            ////得到[appSettings]节点中关于Key的子节点
            XmlElement element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
            if (element != null)
            {
                value = element.GetAttribute("value");
            }
            return value;
        }
        /// <summary>
        /// 对[connectionStrings]节点依据name值读取到connectionString值,返回字符串
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="name">要读取的name值</param>
        /// <returns>返回connectionString值的字符串</returns>
        public static string ReadConnectionStringByName(ConfigurationFile configurationFile, string name)
        {
            string connectionString = string.Empty;
            string filename = string.Empty;
            if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())
            {
                filename = Application.ExecutablePath + ".config";
            }
            else
            {
                filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";
            }
            XmlDocument doc = new XmlDocument();
            doc.Load(filename); //加载配置文件
            XmlNode node = doc.SelectSingleNode("//connectionStrings");   //得到[appSettings]节点
            ////得到[connectionString]节点中关于name的子节点
            XmlElement element = (XmlElement)node.SelectSingleNode("//add[@name='" + name + "']");
            if (element != null)
            {
                connectionString = element.GetAttribute("connectionString");
            }
            return connectionString;
        }
        /// <summary>
        /// 更新或新增[appSettings]节点的子节点值,存在则更新子节点Value,不存在则新增子节点,返回成功与否布尔值
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="key">子节点Key值</param>
        /// <param name="value">子节点value值</param>
        /// <returns>返回成功与否布尔值</returns>
        public static bool UpdateOrCreateAppSetting(ConfigurationFile configurationFile, string key, string value)
        {
            bool isSuccess = false;
            string filename = string.Empty;
            if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())
            {
                filename = Application.ExecutablePath + ".config";
            }
            else
            {
                filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";
            }
            XmlDocument doc = new XmlDocument();
            doc.Load(filename); //加载配置文件
            XmlNode node = doc.SelectSingleNode("//appSettings");   //得到[appSettings]节点
            try
            {
                ////得到[appSettings]节点中关于Key的子节点
                XmlElement element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
                if (element != null)
                {
                    //存在则更新子节点Value
                    element.SetAttribute("value", value);
                }
                else
                {
                    //不存在则新增子节点
                    XmlElement subElement = doc.CreateElement("add");
                    subElement.SetAttribute("key", key);
                    subElement.SetAttribute("value", value);
                    node.AppendChild(subElement);
                }
                //保存至配置文件(方式一)
                using (XmlTextWriter xmlwriter = new XmlTextWriter(filename, null))
                {
                    xmlwriter.Formatting = Formatting.Indented;
                    doc.WriteTo(xmlwriter);
                    xmlwriter.Flush();
                }
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
                throw ex;
            }
            return isSuccess;
        }
        /// <summary>
        /// 更新或新增[connectionStrings]节点的子节点值,存在则更新子节点,不存在则新增子节点,返回成功与否布尔值
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="name">子节点name值</param>
        /// <param name="connectionString">子节点connectionString值</param>
        /// <param name="providerName">子节点providerName值</param>
        /// <returns>返回成功与否布尔值</returns>
        public static bool UpdateOrCreateConnectionString(ConfigurationFile configurationFile, string name, string connectionString, string providerName)
        {
            bool isSuccess = false;
            string filename = string.Empty;
            if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())
            {
                filename = Application.StartupPath + ".config";
            }
            else
            {
                filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";
            }
            XmlDocument doc = new XmlDocument();
            doc.Load(filename); //加载配置文件
            XmlNode node = doc.SelectSingleNode("//connectionStrings");   //得到[connectionStrings]节点
            try
            {
                ////得到[connectionStrings]节点中关于Name的子节点
                XmlElement element = (XmlElement)node.SelectSingleNode("//add[@name='" + name + "']");
                if (element != null)
                {
                    //存在则更新子节点
                    element.SetAttribute("connectionString", connectionString);
                    element.SetAttribute("providerName", providerName);
                }
                else
                {
                    //不存在则新增子节点
                    XmlElement subElement = doc.CreateElement("add");
                    subElement.SetAttribute("name", name);
                    subElement.SetAttribute("connectionString", connectionString);
                    subElement.SetAttribute("providerName", providerName);
                    node.AppendChild(subElement);
                }
                //保存至配置文件(方式二)
                doc.Save(filename);
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
                throw ex;
            }
            return isSuccess;
        }
        /// <summary>
        /// 删除[appSettings]节点中包含Key值的子节点,返回成功与否布尔值
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="key">要删除的子节点Key值</param>
        /// <returns>返回成功与否布尔值</returns>
        public static bool DeleteByKey(ConfigurationFile configurationFile, string key)
        {
            bool isSuccess = false;
            string filename = string.Empty;
            if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())
            {
                filename = Application.ExecutablePath + ".config";
            }
            else
            {
                filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";
            }
            XmlDocument doc = new XmlDocument();
            doc.Load(filename); //加载配置文件
            XmlNode node = doc.SelectSingleNode("//appSettings");   //得到[appSettings]节点
            ////得到[appSettings]节点中关于Key的子节点
            XmlElement element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
            if (element != null)
            {
                //存在则删除子节点
                element.ParentNode.RemoveChild(element);
            }
            else
            {
                //不存在
            }
            try
            {
                //保存至配置文件(方式一)
                using (XmlTextWriter xmlwriter = new XmlTextWriter(filename, null))
                {
                    xmlwriter.Formatting = Formatting.Indented;
                    doc.WriteTo(xmlwriter);
                    xmlwriter.Flush();
                }
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
            }
            return isSuccess;
        }
        /// <summary>
        /// 删除[connectionStrings]节点中包含name值的子节点,返回成功与否布尔值
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="name">要删除的子节点name值</param>
        /// <returns>返回成功与否布尔值</returns>
        public static bool DeleteByName(ConfigurationFile configurationFile, string name)
        {
            bool isSuccess = false;
            string filename = string.Empty;
            if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())
            {
                filename = Application.ExecutablePath  + ".config";
            }
            else
            {
                filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";
            }
            XmlDocument doc = new XmlDocument();
            doc.Load(filename); //加载配置文件
            XmlNode node = doc.SelectSingleNode("//connectionStrings");   //得到[connectionStrings]节点
            ////得到[connectionStrings]节点中关于Name的子节点
            XmlElement element = (XmlElement)node.SelectSingleNode("//add[@name='" + name + "']");
            if (element != null)
            {
                //存在则删除子节点
                node.RemoveChild(element);
            }
            else
            {
                //不存在
            }
            try
            {
                //保存至配置文件(方式二)
                doc.Save(filename);
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
            }
            return isSuccess;
        }
    }
}

源码来自:https://pan.quark.cn/s/a4b39357ea24 ### 操作指南:洗衣机使用方法详解#### 1. 启动与水量设定- **使用方法**:使用者必须首先按下洗衣设备上的“启动”按键,同时依据衣物数量设定相应的“水量选择”旋钮(高、中或低水量)。这一步骤是洗衣机运行程序的开端。- **运作机制**:一旦“启动”按键被触发,洗衣设备内部的控制系统便会启动,通过感应器识别水量选择旋钮的位置,进而确定所需的水量高度。- **技术执行**:在当代洗衣设备中,这一流程一般由微处理器掌管,借助电磁阀调控进水量,直至达到指定的高度。#### 2. 进水过程- **使用说明**:启动后,洗衣设备开始进水,直至达到所选的水位(高、中或低)。- **技术参数**:水量的监测通常采用浮子式水量控制器或压力感应器来实现。当水位达到预定值时,进水阀会自动关闭,停止进水。- **使用提醒**:务必确保水龙头已开启,并检查水管连接是否牢固,以防止漏水。#### 3. 清洗过程- **使用步骤**:2秒后,洗衣设备进入清洗环节。在此期间,滚筒会执行一系列正转和反转的动作: - 正转25秒 - 暂停3秒 - 反转25秒 - 再次暂停3秒- **重复次数**:这一系列动作将重复执行5次,总耗时为280秒。- **技术关键**:清洗环节通过电机驱动滚筒旋转,利用水流冲击力和洗衣液的化学效果,清除衣物上的污垢。#### 4. 排水与甩干- **使用步骤**:清洗结束后,洗衣设备会自动进行排水,将污水排出,然后进入甩干阶段,甩干时间为30秒。- **技术应用**:排水是通过泵将水抽出洗衣设备;甩干则是通过高速旋转滚筒,利用离心力去除衣物上的水分。- **使用提醒**:...
代码下载地址: https://pan.quark.cn/s/c289368a8f5c 在安卓应用开发领域,构建一个高效且用户友好的聊天系统是一项核心任务。 为了协助开发者们迅速达成这一目标,本文将分析几种常见的安卓聊天框架,并深入说明它们的功能特性、应用方法及主要优势。 1. **环信(Easemob)** 环信是一个专为移动应用打造的即时通讯软件开发套件,涵盖了文本、图片、语音、视频等多种消息形式。 通过整合环信SDK,开发者能够迅速构建自身的聊天平台。 环信支持消息内容的个性化定制,能够应对各种复杂的应用场景,并提供多样的API接口供开发者使用。 2. **融云(RongCloud)** 融云作为国内领先的IM云服务企业,提供了全面的聊天解决方案,包括一对一交流、多人群聊、聊天间等。 融云的突出之处在于其稳定运行和高并发处理性能,以及功能完备的后台管理工具,便于开发者执行用户管理、消息发布等操作。 再者,融云支持多种消息格式,如位置信息、文件传输、表情符号等,显著增强了用户聊天体验。 3. **Firebase Cloud Messaging(FCM)** FCM由Google提供的云端消息传递服务,可达成安卓设备与服务器之间的即时数据交换。 虽然FCM主要应用于消息推送,但配合Firebase Realtime Database或Firestore数据库,开发者可以开发基础的聊天软件。 FCM的显著优势在于其全球性的推送网络,保障了消息能够及时且精确地传输至用户。 4. **JMessage(极光推送)** 极光推送是一款提供消息发布服务的软件开发工具包,同时具备基础的即时通讯能力。 除了常规的文字、图片信息外,极光推送还支持个性化消息,使得开发者能够实现更为复杂的聊天功能。 此...
<think>我们被问到“Web.config是什么”,这是一个关于ASP.NET配置系统的问题。需要详细解释Web.config文件的作用、结构和使用方法,并给出相关代码示例(如果适用)。最后按照要求提出四个相关问题。回答结构:1.解释Web.config是什么2.说明其主要功能和特点3.展示一个典型的Web.config文件结构(代码示例)4.解释其中常见的配置节5.提出相关问题</think>### Web.config 详解 Web.config 是 ASP.NET 应用程序的核心配置文件,它使用 XML 格式定义应用程序的各种设置和行为。这个文件位于 ASP.NET 应用程序的根目录中,控制着应用程序的几乎所有方面。 #### Web.config 的主要功能 1. **应用程序设置**: - 存储数据库连接字符串 - 配置应用程序参数 - 定义自定义设置 2. **运行时行为**: - 配置会话状态(Session State) - 设置编译选项 - 定义错误处理策略 3. **安全配置**: - 身份验证(Authentication) - 授权(Authorization) - 角色管理(Role Management) 4. **性能优化**: - 缓存配置 - 输出压缩 - HTTP 模块配置 #### 典型 Web.config 结构示例 ```xml <?xml version="1.0" encoding="utf-8"?> <configuration> <!-- 应用程序设置 --> <appSettings> <add key="ApplicationName" value="MyWebApp" /> <add key="MaxRecords" value="100" /> </appSettings> <!-- 数据库连接字符串 --> <connectionStrings> <add name="DefaultConnection" connectionString="Server=.;Database=MyDB;Integrated Security=True;" providerName="System.Data.SqlClient" /> </connectionStrings> <!-- 系统设置 --> <system.web> <!-- 编译设置 --> <compilation debug="true" targetFramework="4.8" /> <!-- 身份验证 --> <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="30" /> </authentication> <!-- 授权规则 --> <authorization> <deny users="?" /> <!-- 拒绝匿名用户 --> </authorization> <!-- 会话状态 --> <sessionState mode="InProc" timeout="20" /> <!-- 自定义错误 --> <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx"> <error statusCode="404" redirect="~/NotFound.aspx" /> </customErrors> <!-- HTTP 模块 --> <httpModules> <add name="ErrorLog" type="MyApp.Modules.ErrorLogger" /> </httpModules> </system.web> <!-- 特定于 IIS 的设置 --> <system.webServer> <modules> <remove name="FormsAuthentication" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> </modules> <!-- 处理程序映射 --> <handlers> <add name="MyHandler" path="*.custom" verb="*" type="MyApp.CustomHandler" /> </handlers> </system.webServer> <!-- 位置特定配置 --> <location path="Admin"> <system.web> <authorization> <allow roles="Administrators" /> <deny users="*" /> </authorization> </system.web> </location> </configuration> ``` #### 关键配置部分详解 1. **`<connectionStrings>`** 存储数据库连接字符串,可通过代码访问: ```csharp string connStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; ``` 2. **`<appSettings>`** 存储自定义键值对配置: ```csharp string appName = ConfigurationManager.AppSettings["ApplicationName"]; ``` 3. **身份验证配置** ```xml <authentication mode="Windows|Forms|Passport|None"> <forms loginUrl="~/Login.aspx" timeout="30" /> </authentication> ``` 4. **授权规则** ```xml <authorization> <allow users="?"/> <!-- 允许匿名用户 --> <allow roles="Admins"/> <!-- 允许管理员角色 --> <deny users="*"/> <!-- 拒绝所有用户 --> </authorization> ``` 5. **自定义错误处理** ```xml <customErrors mode="On|Off|RemoteOnly" defaultRedirect="~/Error.aspx"> <error statusCode="404" redirect="~/NotFound.aspx"/> </customErrors> ``` #### 分层配置继承 Web.config 支持分层配置结构: ``` 服务器级别 (Machine.config) | 站点根目录 (Web.config) | 子目录 (Web.config) ``` - 子目录中的 Web.config 继承父目录设置 - 子目录设置可以覆盖父目录设置 - `Machine.config` 包含所有 ASP.NET 应用程序的默认设置 #### 在代码中访问配置 ```csharp using System.Configuration; using System.Web.Configuration; public class ConfigHelper { // 获取连接字符串 public static string GetConnectionString(string name) { return WebConfigurationManager.ConnectionStrings[name].ConnectionString; } // 获取应用设置 public static string GetAppSetting(string key) { return WebConfigurationManager.AppSettings[key]; } // 修改配置(运行时) public static void UpdateAppSetting(string key, string value) { Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); config.AppSettings.Settings[key].Value = value; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); } } ``` #### Web.config 最佳实践 1. **安全注意事项**: - 不要在配置文件中存储明文密码 - 使用 `aspnet_regiis` 工具加密敏感部分: ``` aspnet_regiis -pe "connectionStrings" -app "/MyApp" ``` - 限制配置文件访问权限 2. **性能优化**: - 生产环境设置 `debug="false"` - 合理配置缓存策略 - 使用 `<httpRuntime>` 优化请求处理 3. **维护技巧**: - 使用配置转换(Web.Debug.config, Web.Release.config) - 合理组织配置节 - 为不同环境创建单独的配置文件 4. **调试帮助**: ```xml <system.web> <trace enabled="true" pageOutput="false" requestLimit="40" localOnly="true"/> </system.web> ``` 访问方式:`http://yoursite/trace.axd` #### Web.config 与 ASP.NET Core 的 appsettings.json 在 ASP.NET Core 中,Web.config 被替代为: - `appsettings.json` - 应用配置 - `launchSettings.json` - 启动配置 - `Program.cs` - 代码配置 但传统 ASP.NET 应用程序仍依赖 Web.config
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值