当前位置: 首页 > 知识库问答 >
问题:

如何从appsettings获取值。在控制台应用程序中使用json。净核心?

怀展
2023-03-14

我正在创建一个控制台应用程序使用。NET Core 3.1和我想有一个app设置json加载所有的环境,路径,变量,...在执行开始,然后从其他库类获取值。我创建了一个设置类,其中的数据包含在应用设置json中。这是我已经在教程中找到的,但我无法获得任何价值。

//Start.cs
public class Startup
{
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();

            Configuration = builder.Build();
        }

        public IConfiguration Configuration { get; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
}

//Settings.cs
 public class Settings
    {
        public ConnectionStrings ConnectionStrings { get; set; }
        public Logging Logging { get; set; }
        public AppSettings AppSettings { get; set; }
    ...

//A class to use it in other lib
 public class Extractor
    {
        private readonly IConfiguration _configuration;

        public Extractor(IConfiguration configuration) : this()
        {
            _configuration = configuration;
            Init();
        }

        public void Init()
        {
            // Extractor:Min is a variable included in appsettings.json
            Min = _configuration.GetValue<int>("Extractor:Min")
                                  
        }

因为我不知道如何初始化所有东西,所以我不能做一个正确的主。。。我错过了什么?我想我一直在为这么简单的事情兜圈子。提前谢谢!注意:我需要从另一个库类中获取这些变量,而不是在Main中。我不知道如何在其他类中初始化“配置”以使用它。谢谢

共有3个答案

子车鸿才
2023-03-14

http://www.techtutorhub.com/article/how-to-read-appsettings-json-configuration-file-in-dot-net-core-console-application/83

帮帮忙!

  1. 应用设置。json(添加appsettings.json后,转到属性并将文件标记为copy to out目录)
{
  "ConnectionString": "Server=localhost;Database=tempDB;Uid=<dbUserName>;Pwd=<dbPassword>",
  "Smtp": {
    "Host": "smtp.gmail.com",
    "Port": "587",
    "Username": "<YourGmailUserName>",
    "Password": "<YourGmailPassword>",
    "From": "Your Name"
  }
}

2.package需要

dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
using System; 
using Microsoft.Extensions.Configuration;

    class Program
        {
            static void Main(string[] args)
            {
                  var builder = new ConfigurationBuilder()
                   .AddJsonFile($"appsettings.json", true, true);
    
                var config = builder.Build();
                var connectionString = config["ConnectionString"];
                var emailHost = config["Smtp:Host"];
                Console.WriteLine($"Connection String is: {connectionString}");
                Console.WriteLine($"Email Host is: {emailHost}");
                Console.ReadLine();
            }
        }
周麒
2023-03-14

我也有同样的问题。NET Core和我发现这个解决方案运行良好:

    {
      "App": 
      {
        "LoginCredentials": 
        {
           "ClientId": "xxx",
           "ClientSecret": "xxx",
           "TenantId": "xxx"
        },
        "DataBase": 
        {
            "PathToDatabases": "xxx"
        },
        "General": 
        {
           "PathToLogFiles": "xxx"
        }
      }

    }
  1. 我创建了一个类AppSettingsHandler。cs
    public class AppSettingsHandler
    {
        private string _filename;
        private AppSettings _config;

        public AppSettingsHandler(string filename)
        {
            _filename = filename;
            _config = GetAppSettings();
        }

        public AppSettings GetAppSettings()
        {
            var config = new ConfigurationBuilder()
               .SetBasePath(AppContext.BaseDirectory)
               .AddJsonFile(_filename, false, true)
               .Build();

            return config.GetSection("App").Get<AppSettings>();
        }
    }

    public class AppSettings
    {
        public LoginCredentialsConfiguration LoginCredentials { get; set; }
        public DatabaseConfiguration DataBase { get; set; }
        public GeneralConfiguration General { get; set; }
    }

每个包含的子类都有一个模型类,我这里只举一个例子:

    public class LoginCredentialsConfiguration
    {
        public string ClientId { get; set; }
        public string ClientSecret { get; set; }
        public string TenantId { get; set; }
    }
            var aH = new AppSettingsHandler("appsettings.json");
            var aS = aH.GetAppSettings();
            var myPath = aS.DataBase.PathToDatabases;

当然,你可以调整代码,使其符合你的需求,也就是说,你必须定义自己的类和子类,当然你可以扩展AppSettingsHandler。通过获取应用程序设置的其他部分来实现cs。json。

傅明知
2023-03-14

您的示例混合了一些ASP NET核心方法,这些方法希望您的代码能够被托管。为了从JSON配置中最低限度地获得选项或设置的问题,请考虑以下内容:

Aconfig。json文件,设置为“复制到输出目录”,以便将其包含在构建中:

{
  "MyFirstClass": {
    "Option1": "some string value",
    "Option2": 42
  },
  "MySecondClass": {
    "SettingOne": "some string value",
    "SettingTwo": 42
  }
}

以下方法将从JSON文件加载内容,然后将内容绑定到两个强类型的选项/设置类,这比逐个值要简洁得多:

using System;
using System.IO;
using Microsoft.Extensions.Configuration;

// NuGet packages:
// Microsoft.Extensions.Configuration.Binder
// Microsoft.Extensions.Configuration.Json

namespace SampleConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("config.json", optional: false);

            IConfiguration config = builder.Build();

            var myFirstClass = config.GetSection("MyFirstClass").Get<MyFirstClass>();
            var mySecondClass = config.GetSection("MySecondClass").Get<MySecondClass>();
            Console.WriteLine($"The answer is always {myFirstClass.Option2}");
        }
    }

    public class MyFirstClass
    {
        public string Option1 { get; set; }
        public int Option2 { get; set; }
    }

    public class MySecondClass
    {
        public string SettingOne { get; set; }
        public int SettingTwo { get; set; }
    }
}
 类似资料:
  • 在的。NET框架4. x,我可以使用在中获取,然后我可以通过 但是在。Net内核,我必须注入,并且不能通过 有没有一种方法可以直接通过获取的值?

  • 我试着把这个项目作为一个正常的参考。但是在重新构建解决方案之后,控制台应用程序仍然没有将.NET核心库作为参考。

  • 我有android应用程序,发布到Play Store。很少有用户出现崩溃 我相信这些报告会存储在谷歌play商店控制台中。我能计算出坠机次数

  • 在Asp。Net Core 3.1应用程序我有以下关于应用程序设置的部分: 我试图获取一些值,比如Facebook的Id,所以我尝试: 但这行不通。。。我怎样才能得到这些值?

  • 我需要调用微软图形API在Azure广告中创建用户。 首先,我需要测试从控制台应用程序,然后需要实现在Azure函数。 https://developer.microsoft.com/en-us/graph/graph-explorer

  • 我在上传文件时遇到错误。Google play控制台中的aab捆绑包与现有密钥库。我有白标签应用程序和密钥库文件 你上传了一个APK或Android应用捆绑包,该捆绑包使用一个密钥签名,该密钥也用于签名交付给用户的APK 在Android应用程序包的概念中,所有30个应用程序都可以使用相同的密钥库文件和密码,还是我们需要为所有30个应用程序创建单独的密钥库和密码?