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/7a757c0c80ca 《在Neovim中运用Lua的详尽教程》在当代文本编辑器领域,Neovim凭借其卓越的性能、可扩展性以及高度可定制的特点,赢得了程序开发者的广泛青睐。 其中,Lua语言的融入更是为Neovim注入了强大的活力。 本指南将深入剖析如何在Neovim中高效地运用Lua进行配置和插件开发,助你充分发挥这一先进功能的潜力。 一、Lua为何成为Neovim的优选方案经典的Vim脚本语言(Vimscript)虽然功能完备,但其语法结构与现代化编程语言相比显得较为复杂。 与此形成对比的是,Lua是一种精简、轻量且性能卓越的脚本语言,具备易于掌握、易于集成的特点。 因此,Neovim选择Lua作为其核心扩展语言,使得配置和插件开发过程变得更加直观和便捷。 二、安装与设置在Neovim中启用Lua支持通常十分简便,因为Lua是Neovim的固有组件。 然而,为了获得最佳体验,我们建议升级至Neovim的最新版本。 可以通过`vim-plug`或`dein.vim`等包管理工具来安装和管理Lua插件。 三、Lua基础在着手编写Neovim的Lua配置之前,需要对Lua语言的基础语法有所掌握。 Lua支持变量、函数、控制流、表(类似于数组和键值对映射)等核心概念。 它的语法设计简洁明了,便于理解和应用。 例如,定义一个变量并赋值:```lualocal myVariable = "Hello, Neovim!"```四、Lua在Neovim中的实际应用1. 配置文件:Neovim的初始化文件`.vimrc`能够完全采用Lua语言编写,只需在文件首部声明`set runtimepath^=~/.config/nvim ini...
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不使用机械式位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估算与控制。文中结合STM32 F4高性能微控制器平台,采用如滑模观测器(SMO)、扩展卡尔曼滤波(EKF)或高频注入法等先进观测技术,实现对电机反电动势或磁链的实时估算,进而完成磁场定向控制(FOC)。研究涵盖了控制算法设计、系统建模、仿真验证(可能使用Simulink)以及在嵌入式平台上的代码实现与实验测试,旨在提高电机驱动系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电机控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师;熟悉C语言和MATLAB/Simulink工具者更佳。; 使用场景及目标:①为永磁同步电机驱动系统在高端制造、新能源汽车、家用电器等领域提供无位置传感器解决方案的设计参考;②指导开发者在STM32平台上实现高性能FOC控制算法,掌握位置观测器的设计与调试方法;③推动电机控制技术向低成本、高可靠方向发展。; 其他说明:该研究强调理论与实践结合,不仅包含算法仿真,还涉及实际硬件平台的部署与测试,建议读者在学习过程中配合使用STM32开发板和PMSM电机进行实操验证,以深入理解控制策略的动态响应与鲁棒性问题。
<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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值