.net ConfigurationManager.GetSection()返回null,如何修复此问题

.net ConfigurationManager.GetSection()返回null,如何修复此问题,.net,.net-core,config,.net,.net Core,Config,也许这个问题已经得到了回答,但我还没有看到任何适合我的东西 问题如下:我无法从app.config读取数据,也不知道自己做错了什么,基本上是获取CcgSettingCcg类型的对象CcgSettingCcg。将来,我计划添加其他设置,总是CcgSettings,但名称不同,比如CcgSettingsCcg2等等 从app.config: <configSections> <sectionGroup name ="GeneralTenantEmailSetting

也许这个问题已经得到了回答,但我还没有看到任何适合我的东西

问题如下:我无法从app.config读取数据,也不知道自己做错了什么,基本上是获取CcgSettingCcg类型的对象CcgSettingCcg。将来,我计划添加其他设置,总是CcgSettings,但名称不同,比如CcgSettingsCcg2等等

从app.config:

<configSections>
        <sectionGroup name ="GeneralTenantEmailSettings">
            <section name="TenantEmailSettings" type="DataApiService.Models.TenantEmailSettings, DataApiService.Models" />
        </sectionGroup>
    </configSections>
    <TenantEmailSettings>
        <CcgSettingCcg SettingsId="520305DC-6E68-4FA3-B53B-18E25E0E21FF" TenantId="A0C55F11-516E-4F7C-9ECD-DEF7C47290B4" Frequency="168" StartDate="03/06/2020" RuleType="Default" To="Ccg" />
    </TenantEmailSettings>
最后,这是我尝试阅读的地方

    var t = ConfigurationManager.GetSection("TenantEmailSettings") as TenantEmailSettings; 
    var s = ConfigurationManager.GetSection("GeneralTenantSettings") as GeneralTenantEmailSettings;
    var c = ConfigurationManager.GetSection("CcgSettings") as CcgSettings;
    var b = ConfigurationManager.GetSection("CcgSettingsCcg") as CcgSettings;

t、 s、c和b返回null,这是我的问题

假设您需要使用app.config文件,这里有一些示例代码应该会有所帮助。为了使示例能够工作,您需要以下NuGet软件包(v3.1.5或更新版本)

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Xml
  • Microsoft.Extensions.Configuration.Binder
示例实现

var builder = new ConfigurationBuilder();
builder.AddXmlFile("App.config");
var config = builder.Build();

var ccgSettingCcg = config.GetSection("TenantEmailSettings:CcgSettingCcg").Get<CcgSettingCcg>();

Console.WriteLine(ccgSettingCcg.SettingsId);
Console.WriteLine(ccgSettingCcg.TenantId);
Console.WriteLine(ccgSettingCcg.Frequency);
示例
App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <TenantEmailSettings>
    <CcgSettingCcg SettingsId="520305DC-6E68-4FA3-B53B-18E25E0E21FF" TenantId="A0C55F11-516E-4F7C-9ECD-DEF7C47290B4" Frequency="168" StartDate="03/06/2020" RuleType="Default" To="Ccg" />
  </TenantEmailSettings>
</configuration>


希望这能有所帮助。

因为我不得不使用.NET core 2.2,所以我的包有问题,当然,上下文无法继承。我的解决方案很糟糕,但它工作正常,满足了要求


解决方案是将app.config视为通用文本文件,并从中进行解析。简单的事情

如果您使用的是.net core,则应使用新约定进行配置设置。谢谢,但是使用.config文件而不是json是要求的一部分。我不确定这是否可行。您可能需要像此人一样使用自定义提供程序。我遇到错误了吗?谢谢,这是一个改进。我正在进行系统配置。ConfigurationErrorsException@Iria您正在使用.NETCore,对吗?如果是这样的话,上面的代码应该可以工作(因为这就是我使用.NET Core 3.1控制台应用程序测试它的方式)。是的,我使用的是.NET Core,代码的第一部分在program.cs中,第二部分可能是您引用了错误的配置生成器。实例化构建器时,请尝试完全限定的命名空间
var builder=new Microsoft.Extensions.Configuration.ConfigurationBuilder()我看到了这个问题,我正在使用.NETCore2.2的nuget包,这些包至少需要3.1
public class CcgSettingCcg
{
    public string SettingsId { get; set; }
    public string TenantId { get; set; }
    public int? Frequency { get; set; }

    // other properties as required
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <TenantEmailSettings>
    <CcgSettingCcg SettingsId="520305DC-6E68-4FA3-B53B-18E25E0E21FF" TenantId="A0C55F11-516E-4F7C-9ECD-DEF7C47290B4" Frequency="168" StartDate="03/06/2020" RuleType="Default" To="Ccg" />
  </TenantEmailSettings>
</configuration>