从 asp.net 核心 3.1 中的 App.config 文件获取数据

get data from App.config file in asp.net core 3.1

我在我的一个项目中安装了 System.Configuration.ConfigurationManager -Version 4.7.0 作为 class 库项目,然后我在其中添加了 app.config 文件。

我已经在我的项目中应用了 ASP.NET Core 3.1。

现在我想获取部分的值。

为此我这样做了:

namespace Alpha.Infrastructure.PaginationUtility
{
   public class PagingInfo
   {
       public virtual int DefaultItemsPerPage { get; set; } = int.Parse(System.Configuration.ConfigurationManager.AppSettings["DefaultItemsPerPage"]);
   }
}

但是我得到了“ArgumentNullException: 值不能为 null”错误!

我该如何解决这个问题?

App.config 文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="DefaultItemsPerPage" value="3"/>
  </appSettings>
</configuration>

解决方案 要解决您的问题,请将 App.config 文件添加到 ENTRY POINT 项目。
这是您的可执行项目,例如 WinForms 或 WPF 或 Console App。
不是 Class 库项目。

原因是当应用程序编译时 App.config 被重命名为 "MyProjectName.Ext.config"。

例如,如果您有 Class 名为 ConfigUtils 的库项目,文件将输出为 ConfigUtils.dll.config。

但 ConfigurationManager 需要入口点的名称加上配置。

因此,如果您的 ConfigUtils 是从 MyApp 控制台项目中引用的。然后输出文件将是 MyApp.exe.config

因此,要让 ConfigurationManager 立即运行而无需任何进一步干预,您需要将 App.config 文件放在入口点项目中。

.NET 核心方式 我建议不要使用 ConfigurationManager...

就用新的方法吧!

为了演示如何在 .NET Core 中执行此操作,我使用 .NET Core 3.1.3 创建了一个控制台应用程序 我还添加了一个扩展方法来包装可重用性的功能。

首先是我的代码:

    using Microsoft.Extensions.Configuration;
    using System;

    class Program
    {
        private static IConfiguration _configuration;
        static void Main(string[] args)
        {
            _configuration = new ConfigurationBuilder()
          .AddJsonFile("appsettings.json", true, true)
          .Build();

            var itemsPerPage = _configuration.GetValue<int>("appSettings", "DefaultItemsPerPage");
            Console.WriteLine("Items Per Page:" + itemsPerPage.ToString());
            Console.ReadLine();
        }
    }
    public static class ConfigExtenstions
    {
        public static T GetValue<T>(this IConfiguration configuration, string configSection, string keyName)
        {
            return (T)Convert.ChangeType(configuration[$"{configSection}:{keyName}"], typeof(T));
        }
        private static T GetValue<T>(string configSection, string configSubSection, string keyName)
        {
            return (T)Convert.ChangeType(Configuration[$"{configSection}:{configSubSection}:{keyName}"], typeof(T));
        }
    }

我的 appsettings.json 文件如下所示:

{
  "appSettings": {
    "DefaultItemsPerPage": 3
  }
}

配置文件可以根据需要建模。在这种情况下,我让它看起来像你的 app.config 文件。

另外我在visual studio中右击了appsettings.json文件,设置为"Copy Always"。

要使所有这些正常工作,您需要像这样添加 2 个 NuGet 包:

备注: 您可以使用其他 "Providers" 从 XML、INI 和其他类型的文件和源中提取配置。为此,您需要添加其他 NuGet 包等。

这个 link 尽管它谈论 ASP.NET Core Configuration 但它非常有用,因为同样的概念适用。