c#读写App.config,ConfigurationManager.AppSettings 不生效的解决方法

针对 “c#读写App.config,ConfigurationManager.AppSettings不生效的解决方法” 这个问题,我们可以从以下几个方面入手:

1. 确认App.config格式是否正确

在使用App.config的时候,我们需要确保这个文件名及格式都是正确的,这是一个很容易被忽略的问题。首先,确认你的App.config文件是放在程序的根目录下,其次,还需要检查这个文件的格式是否正确。

其中,正确的格式是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="key1" value="value1" />
    <add key="key2" value="value2" />
  </appSettings>
</configuration>

上面的示例中,我们可以看到用 <appSettings> 标签将多个key-value键值对包含起来。

标准格式的App.config文件中还有其他内容,这里就不赘述了,感兴趣的同学可以自行参考文档。

2. 使用 Configuration 直接读写

有时使用 ConfigurationManager.AppSettings 来读取和写入 App.config 文件中的设置并不能生效,这可能是因为在读取和修改 App.config 文件之前还没有进行显式的访问或打开操作。

解决方法是显式地打开 App.config 文件,然后使用 Configuration 对象来读取和写入设置。

using System.Configuration;

// 读取App.config
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var setting = config.AppSettings.Settings["key1"];
Console.WriteLine(setting.Value);

// 写入App.config
config.AppSettings.Settings["key2"].Value = "new value";
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

上面的示例中,我们使用 ConfigurationManager.OpenExeConfiguration 显式地打开 App.config 文件,然后使用 config.AppSettings.Settings 来读取和写入上面的 key1key2的值。最后,我们还要调用 config.Save 方法将修改后的配置写回 App.config 文件。

3. 使用自定义配置节

在读取和修改 App.config 文件时,我们还可以使用自定义配置节。自定义配置节是一个非常灵活的方法,它可以帮助我们封装特定的配置设置,以便我们能够更方便地读取和修改这些设置。

定义自定义配置节非常简单,只需继承 ConfigurationSection 并添加 appSettings 标签即可:

using System.Configuration;

namespace Demo.Config
{
    public class MyConfiguration : ConfigurationSection
    {
        [ConfigurationProperty("appSettings")]
        public AppSettings AppSettings => (AppSettings)base["appSettings"];
    }

    public class AppSettings : ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement()
            => new AppSetting();

        protected override object GetElementKey(ConfigurationElement element)
            => ((AppSetting)element).Name;
    }

    public class AppSetting : ConfigurationElement
    {
        [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
        public string Name => (string)this["name"];

        [ConfigurationProperty("value", IsRequired = true)]
        public string Value => (string)this["value"];
    }
}

在上面的示例中,我们定义了一个名为 MyConfiguration 的自定义配置节,并将其包含在名为 appSettings 的标签中。这个自定义配置节还包含一个名为 AppSettings 的对象,它是一个 ConfigurationElementCollection 类型,包括定义在 AppSetting 类中的键值对。

要使用自定义配置节,我们需要添加一个名为 configSections 的顶部节点,然后在其中添加一个名为 MyConfiguration 的节点,然后才能访问我们自定义的配置节。示例代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MyConfiguration" type="Demo.Config.MyConfiguration, Demo" />
  </configSections>
  <MyConfiguration>
    <appSettings>
      <add name="key1" value="value1" />
      <add name="key2" value="value2" />
    </appSettings>
  </MyConfiguration>
</configuration>

访问自定义配置节的代码如下:

using Demo.Config;

// 读取App.config
var myConfig = (MyConfiguration)ConfigurationManager.GetSection("MyConfiguration");
var setting = myConfig.AppSettings["key1"].Value;
Console.WriteLine(setting);

// 更新App.config
myConfig.AppSettings.Add(new AppSetting { Name = "newKey", Value = "newValue" });
ConfigurationManager.RefreshSection("MyConfiguration");

在这个示例中,我们使用 ConfigurationManager.GetSection 方法来获取自定义配置节,然后使用 myConfig.AppSettings 来读取和写入其中的配置。

总结

以上就是针对“c#读写App.config,ConfigurationManager.AppSettings不生效的解决方法”的分析和解决方案。具体来说,我们可以在确认App.config文件格式无误的前提下,使用 ConfigurationManager.OpenExeConfiguration 方法来显式地访问并修改文件中的设置;或者基于自定义配置节来封装和访问配置设置。希望这些示例能够帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#读写App.config,ConfigurationManager.AppSettings 不生效的解决方法 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 详解StackExchange.Redis通用封装类分享

    详解StackExchange.Redis通用封装类分享 前言 本文主要介绍了StackExchange.Redis通用封装类的设计与使用,帮助开发人员更方便地使用Redis。 StackExchange.Redis介绍 StackExchange.Redis是一个开源的Redis驱动程序,是使用C#编写的,支持.NET Framework和.NET Cor…

    C# 2023年5月31日
    00
  • C#实现串口调试工具

    下面是关于C#实现串口调试工具的完整攻略: 1. 前期准备 在使用C#来实现串口调试工具之前,首先要准备好相关的环境和工具。具体的步骤如下: 安装Visual Studio开发工具,选择适合自己的版本。 新建一个项目,选择“Windows窗体应用程序”。 在项目中添加“串口”控件。 2. 界面设计 接下来要进行的步骤是对调试工具的界面进行设计。通过界面设计,…

    C# 2023年6月6日
    00
  • Ajax实现评论中顶和踩功能的实例代码

    下面是Ajax实现评论中顶和踩功能的完整攻略。 1. 实现思路 实现评论中顶和踩功能,需要使用 Ajax 技术,通过向服务器端发送异步请求,实现对数据库中的数据进行增、删、改的操作。 一般而言,实现评论中顶和踩功能的流程如下: 点击“顶”或“踩”按钮; 发送 Ajax 请求到服务器端; 服务器端接收请求,根据请求的类型,在数据库中进行相应的操作; 服务器端将…

    C# 2023年6月1日
    00
  • C#中Dapper的使用教程

    下面就为大家详细讲解一下 C# 中 Dapper 的使用教程。 什么是 Dapper? Dapper 是一个轻量级 ORM(Object Relational Mapping)框架。它为 SQL Server、MySQL、Oracle 和 PostgreSQL 提供了一套高效处理 SQL 语句的方法。它采用 Object 与关系数据库之间的映射模型,使开发人…

    C# 2023年5月31日
    00
  • .Net设计模式之单例模式(Singleton)

    .Net设计模式之单例模式(Singleton) 什么是单例模式? 在软件系统中,有些类只需要存在唯一的一个实例对象,比如系统中的窗口管理器、文件系统、计时器等,这些对象在系统中只允许存在一个实例。单例模式就是为了满足这类需求而生的一种设计模式。 单例模式是指在整个应用程序中只能有一个实例对象的类。通常情况下,单例模式是指全局社区共享的一个唯一对象实例,比如…

    C# 2023年5月31日
    00
  • ASP.NET MVC使用异步Action的方法

    以下是“ASP.NET MVC使用异步Action的方法”的完整攻略: 什么是异步Action 在ASP.NET MVC中,我们可以使用异步Action来提高应用程序的性能和可伸缩性。异步Action可以在执行长时间运行的操作时释放线程,从而提高应用的吞吐量。 使用异步Action的步骤 以下是使用异步Action的步骤: 步骤1:创建异步Action 首先…

    C# 2023年5月12日
    00
  • .NET中堆栈和堆的特点与差异介绍

    在.NET中,堆和栈是两种常见的内存分配方式。堆和栈的特点和差异如下: 堆的特点 堆是一种动态分配的内存区域,用于存储对象和数据结构。 堆的大小可以动态增长或缩小,由垃圾回收器负责管理。 堆中的对象可以通过引用来访问,引用是指向对象在堆中的地址。 堆中的对象可以被多个线程共享。 堆中的对象的生命周期由垃圾回收器来管理。 栈的特点 栈是一种静态分配的内存区域,…

    C# 2023年5月17日
    00
  • c#对象反序列化与对象序列化示例详解

    介绍 首先我们需要明确一下对象序列化与反序列化的概念,对象序列化就是将对象转化为可以存储或传输的格式。相反,反序列化表示将存储格式或传输格式转化为对象。 C#语言提供了一个方便的API,可以使用这个API轻松地将对象序列化和反序列化。这个API被称为“System.Runtime.Serialization”。 C#对象序列化示例 接下来我们将演示如何使用C…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部