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日

相关文章

  • C# 8.0新特性介绍

    C# 8.0新特性介绍 C# 8.0是微软推出的最新版本的C#语言,带来了一些值得注意的新特性。本文将介绍C# 8.0的新特性以及如何使用它们。 Nullable引用类型 C# 8.0中引入了可空引用类型,这意味着我们可以声明“引用可能为空”的变量。现在,在声明引用类型变量时需要在类型名称后面添加一个“?”标记,这个标记使得编译器可以检测到我们对可空变量的操…

    C# 2023年6月1日
    00
  • C#中DateTime的时间加减法操作小结

    C#中DateTime的时间加减法操作小结 在 C# 中,我们可以使用 DateTime 类来操作日期和时间。这个类提供了多种方式来进行时间的计算,包括时间的加、减、比较等操作。 时间加减法操作 在 DateTime 类中,我们可以使用 Add 方法和 Subtract 方法来进行时间的加减法操作。具体用法如下: DateTime date = DateTi…

    C# 2023年6月1日
    00
  • C#中实现在32位、64位系统下自动切换不同的SQLite dll文件

    实现在32位、64位系统下自动切换不同的SQLite dll文件,需要做以下几个步骤: 导入SQLite.Interop.dll文件 在C#项目中使用SQLite时,需要引入SQLite.Interop.dll文件,该文件是SQLite官方提供的用于自动切换32位、64位dll文件的库文件。在VS中创建C#项目后,可以直接从NuGet中搜索SQLite.In…

    C# 2023年6月7日
    00
  • c#中的常用ToString()方法总结

    C#中的常用ToString()方法总结 在C#编程中,ToString()方法是十分常用的方法之一。它用于将一个对象转化为字符串表示形式。本篇攻略将详细讲解C#中常用的ToString()方法及其用法。 ToString()方法的基本用法 在C#中,ToString()方法是定义在Object类中的虚方法,它可以被任意类型重写。因为所有类型都继承自Obje…

    C# 2023年6月1日
    00
  • C#语法相比其它语言比较独特的地方(二)

    下面我将详细讲解“C#语法相比其它语言比较独特的地方(二)”的攻略: 1. 运算符重载 在C#中,我们可以重载运算符来自定义类型之间的运算操作。这就是C#语法相比其它语言比较独特的地方之一。 例如,我们可以定义一个Rational类(代表有理数),并重载运算符以便让我们像操作整数一样操作有理数。 class Rational { public int Num…

    C# 2023年5月31日
    00
  • .Net Core2.1 WebAPI新增Swagger插件详解

    .Net Core2.1 WebAPI新增Swagger插件详解 Swagger是一种API文档工具,它可以自动生成API文档,并提供一个交互式的UI界面,方便开发人员测试API。在.Net Core2.1中,我们可以使用Swagger插件来自动生成API文档。本攻略将详细介绍如何使用Swagger插件。 安装Swagger插件 我们可以使用以下命令来安装S…

    C# 2023年5月17日
    00
  • ASP.NET Core 3.x 并发限制的实现代码

    下面提供一份 ASP.NET Core 3.x 并发限制的实现代码完整攻略。 一、限制并发的原理 首先介绍一下限制并发的原理。在 ASP.NET Core 中,可以通过限制同时访问的线程数来限制并发。具体实现方式是使用 SemaphoreSlim 类,该类提供了限制线程访问的功能。 SemaphoreSlim 类具有两个重要的方法 WaitAsync 和 R…

    C# 2023年5月31日
    00
  • 详解C# List<T>的Contains,Exists,Any,Where性能对比

    标题 详解C# List的Contains,Exists,Any,Where性能对比 简介 本文主要讲解C# List的Contains,Exists,Any,Where性能对比问题,通过对比测试实际运行时间来研究它们之间的优劣性。 正文 在实际的开发中,我们经常会需要在一个List中查找指定的元素。而C#中提供了多种查找方法,下面我们来看一下它们之间的性能…

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