.net 读取独立的配置文件

本文介绍了一种将配置信息从主配置文件中分离出来的方法,并通过一个具体示例展示了如何实现配置文件的读取及配置项的应用。

做底层项目经常会需要保存配置信息.为了方便运维,还是把配置文件单独分离出来配置比较好 ,一个项目一个单独的独立配置文件,简单,易维护,易移植.
全部都放在一个Web.config中.拥挤不堪,找起来麻烦,看着都烦.写说明文档也麻烦的要死..还是独立配置比较清爽..

下面是读取单独配置文件的类



    public class XMLConfigRead
    {
        public   string ConfigPath;
         public XMLConfigRead(string fileName)
        { 
            //HttpContext.Current.Request.PhysicalApplicationPath 取得config文件路径  
            string dllPath = string.Empty;

            try
            {
                //dllPath = HttpContext.Current.Request.PhysicalApplicationPath;
                dllPath = HttpRuntime.AppDomainAppPath;//Web环境下 这个最稳定.应该用这个.
            }
            catch (Exception ex)
            {  
                dllPath = Path.GetDirectoryName(new Uri(this.GetType().Assembly.CodeBase).AbsolutePath); //本地应用程序的情况下.应该用这个
            } 

            if (File.Exists(fileName))
            {
                ConfigPath = fileName;
            }
            else if (File.Exists(Path.Combine(dllPath, fileName)))
            { 
                ConfigPath = Path.Combine(dllPath, fileName);
            }
            else
            {
                throw new Exception("配置文件不存在,请检查");
            }

        }

            public string ReadNodeValue (string nodename)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(ConfigPath);
            XmlNode node = doc.SelectSingleNode(nodename);
            if (node.Value == null)
            {
                 if (node.Attributes["value"] == null)
                {
                    return "";
                }else{
                     return node.Attributes["value"].Value;
                }
            }else{
                return node.Value;
            }
        }
    }

把 WebSiteErrorLog.config 配置文件,直接放在网站根目录下,
读取方法是
XMLConfigRead ConfigRead = new XMLConfigRead(“WebSiteErrorLog.config”);

当然也可以把配置文件都放到config下面 读取方法得改成
XMLConfigRead ConfigRead = new XMLConfigRead(“config/WebSiteErrorLog.config”);

<?xml version="1.0" encoding="utf-8" ?>
<ErrorLog>
    <DB_DataSource value="10.90.0.0*"/>
    <DB_InitialCatalog value="Log"/>
    <DB_IntegratedSecurity value="false"/>
    <DB_MaxPoolSize value="10000"/>
    <DB_ConnectTimeout value="1"/>
    <DB_UserID value="sa"/>
    <DB_Password value="999"/>
    <WebSiteId value="123456789"/> 
</ErrorLog>

//使用方法, 读取WebSiteErrorLog.config 配置文件 中的配置
见下面代码

 public class StoreErrorToDB
    {
        XMLConfigRead ConfigRead = new XMLConfigRead("WebSiteErrorLog.config");

        static SqlConnectionStringBuilder connStr ;
        static string WebSiteId;
        public StoreErrorToDB()
        {
            if (connStr == null)
            {
                connStr = new SqlConnectionStringBuilder();
                connStr.DataSource = ConfigRead.ReadNodeValue("ErrorLog/DB_DataSource");
                connStr.InitialCatalog = ConfigRead.ReadNodeValue("ErrorLog/DB_InitialCatalog");
                connStr.IntegratedSecurity = Convert.ToBoolean(ConfigRead.ReadNodeValue("ErrorLog/DB_IntegratedSecurity"));
                connStr.UserID = ConfigRead.ReadNodeValue("ErrorLog/DB_UserID");
                connStr.Password = ConfigRead.ReadNodeValue("ErrorLog/DB_Password");

                //设置最大连接池
                connStr.MaxPoolSize = Convert.ToInt32(ConfigRead.ReadNodeValue("ErrorLog/DB_MaxPoolSize"));
                //设置超时时间为1秒
                connStr.ConnectTimeout = Convert.ToInt32(ConfigRead.ReadNodeValue("ErrorLog/DB_ConnectTimeout"));

                WebSiteId = ConfigRead.ReadNodeValue("ErrorLog/WebSiteId");
            }

        }
        public void SaveError(Error error)
        {  
                    SqlConnection conn =  new SqlConnection(connStr.ConnectionString);
                    conn.Open();
                    string sql = @" INSERT INTO Error
                                    (Id,WebSiteId,RequestQueryString,RequestUserAgent,RequestUserHostAddress,RequestUrl,RequestUrlReferrer,RequestRequestType,RequestHttpMethod,RequestContentEncoding,InnerException_Message,InnerException_Source,InnerException_StackTrace,InnerException_TargetSite,Message,Source,StackTrace,TargetSite,RequestCookie,RequestHeaders,RequestForms)
                                     VALUES 
                                    (@Id,@WebSiteId,@RequestQueryString,@RequestUserAgent,@RequestUserHostAddress,@RequestUrl,@RequestUrlReferrer,@RequestRequestType,@RequestHttpMethod,@RequestContentEncoding,@InnerException_Message,@InnerException_Source,@InnerException_StackTrace,@InnerException_TargetSite,@Message,@Source,@StackTrace,@TargetSite,@RequestCookie,@RequestHeaders,@RequestForms)";


                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = sql; 

                    cmd.Parameters.Add("@RequestQueryString",SqlDbType.VarChar,4000);
                    cmd.Parameters.Add("@RequestUserAgent",SqlDbType.VarChar,100);
                    cmd.Parameters.Add("@RequestUserHostAddress",SqlDbType.VarChar,500);
                    cmd.Parameters.Add("@RequestUrl",SqlDbType.VarChar,500);
                    cmd.Parameters.Add("@RequestUrlReferrer",SqlDbType.VarChar,500);
                    cmd.Parameters.Add("@RequestRequestType",SqlDbType.VarChar,10);
                    cmd.Parameters.Add("@RequestHttpMethod",SqlDbType.VarChar,10);
                    cmd.Parameters.Add("@RequestContentEncoding",SqlDbType.VarChar,10);
                    cmd.Parameters.Add("@InnerException_Message",SqlDbType.VarChar,500);
                    cmd.Parameters.Add("@InnerException_Source",SqlDbType.VarChar,500);
                    cmd.Parameters.Add("@InnerException_StackTrace",SqlDbType.VarChar,600);
                    cmd.Parameters.Add("@InnerException_TargetSite",SqlDbType.VarChar,600);
                    cmd.Parameters.Add("@Message",SqlDbType.VarChar,500);
                    cmd.Parameters.Add("@Source",SqlDbType.VarChar,500);
                    cmd.Parameters.Add("@StackTrace",SqlDbType.VarChar,600);
                    cmd.Parameters.Add("@TargetSite", SqlDbType.VarChar, 600);
                    cmd.Parameters.Add("@WebSiteId", SqlDbType.VarChar, 50);
                    cmd.Parameters.Add("@Id", SqlDbType.UniqueIdentifier, 60);
                    cmd.Parameters.Add("@RequestCookie", SqlDbType.VarChar, 4000);
                    cmd.Parameters.Add("@RequestHeaders", SqlDbType.VarChar, 4000);
                    cmd.Parameters.Add("@RequestForms", SqlDbType.VarChar, 4000);


                    cmd.Parameters[0].Value = error.RequestQueryString;
                    cmd.Parameters[1].Value = error.RequestUserAgent;
                    cmd.Parameters[2].Value = error.RequestUserHostAddress;
                    cmd.Parameters[3].Value = error.RequestUrl;
                    cmd.Parameters[4].Value = error.RequestUrlReferrer;
                    cmd.Parameters[5].Value = error.RequestRequestType;
                    cmd.Parameters[6].Value = error.RequestHttpMethod;
                    cmd.Parameters[7].Value = error.RequestContentEncoding;
                    cmd.Parameters[8].Value = error.InnerException_Message;
                    cmd.Parameters[9].Value = error.InnerException_Source;
                    cmd.Parameters[10].Value = error.InnerException_StackTrace;
                    cmd.Parameters[11].Value = error.InnerException_TargetSite;
                    cmd.Parameters[12].Value = error.Message;
                    cmd.Parameters[13].Value = error.Source;
                    cmd.Parameters[14].Value = error.StackTrace;
                    cmd.Parameters[15].Value = error.TargetSite;
                    cmd.Parameters[16].Value = WebSiteId;
                    cmd.Parameters[17].Value = error.Id;
                    cmd.Parameters[18].Value = error.RequestCookie;
                    cmd.Parameters[19].Value = error.RequestHeaders;
                    cmd.Parameters[20].Value = error.RequestForms;

                    cmd.ExecuteNonQuery();

                    conn.Close(); 
        }

    }
### 在 ASP.NET Core 中读取 `appsettings` 配置文件 #### 使用 `Program.cs` 读取配置 在 ASP.NET Core 6 或更高版本中,可以通过修改 `Program.cs` 来加载并读取 `appsettings.json` 的配置内容。以下是具体实现方法: ```csharp var builder = WebApplication.CreateBuilder(args); // 加载默认的 appsettings.json 和其他环境特定的配置文件 builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true); // 添加命令行参数作为配置源 builder.Configuration.AddCommandLine(args); ``` 上述代码片段展示了如何通过 `WebApplicationBuilder` 动态加载不同环境下的配置文件[^1]。 --- #### 利用 `ConfigurationBuilder` 手动读取配置 如果需要手动构建配置对象而不依赖于框架自动化的初始化过程,则可以使用 `Microsoft.Extensions.Configuration` 提供的功能来完成此操作。以下是一个完整的示例: ```csharp using Microsoft.Extensions.Configuration; IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); string mySettingValue = configuration["MySettings:Key"]; Console.WriteLine(mySettingValue); // 输出指定键对应的值 ``` 这段代码说明了如何创建自定义的 `ConfigurationBuilder` 实例,并从中提取所需的配置项[^3]。 --- #### 环境变量驱动的多配置支持 为了适应不同的运行环境(如开发、测试或生产),ASP.NET Core 支持基于当前活动环境名称动态切换使用的配置文件。例如,当设置了环境变量 `ASPNETCORE_ENVIRONMENT=Development` 后,程序会优先尝试加载名为 `appsettings.Development.json` 的扩展配置文件[^2]。 这种机制允许开发者针对每种场景单独维护一组独立的设置而无需频繁更改核心逻辑。 --- #### 类库项目中的应用案例 对于非 Web 应用类型的解决方案组件(比如类库工程),同样能够借助相同的工具集获取存储于外部 JSON 文档里的数据记录。只需引入必要的 NuGet 包即可开始工作[^5]: ```xml <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.x.x" /> ``` 之后按照前述指导编写相应代码便可成功接入目标资源。 --- #### 总结 综上所述,在现代版次的 ASP.NET Core 平台上处理应用程序级别的个性化选项变得异常简便快捷;无论是标准流程还是特殊需求场合下均提供了灵活且强大的手段予以满足。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值