从.NET 4.5.2项目访问appsettings.json

ERe*_*man 7 c# asp.net-core

我有两个项目,一个1.1.0 ASP.NET Core项目和一个对4.5.2项目的引用。

我想将值从appsettings.json文件获取到我的4.5.2项目中。appsettings.json文件在核心项目中。

在我的4.5.2项目中尝试了一下,没有运气:

var mailServer = ConfigurationManager.AppSettings["MailServer"];
Run Code Online (Sandbox Code Playgroud)

如何从4.5.2项目中访问值?

Set*_*Set 8

ConfigurationManager与具有特定格式且不知道如何读取自定义JSON文件的基于XML的配置文件一起使用。

因为也appsettings.json用于ASP.NET Core项目,所以您可以向Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json包中添加依赖项,并使用“ .NET Core方法”读取设置:

var builder = new ConfigurationBuilder()
              .AddJsonFile(@"<path to appsettings.json>");

var configuration = builder.Build();
//  configuration["MailServer"]
Run Code Online (Sandbox Code Playgroud)

当然,就像appsettings.json一个简单的JSON文件一样,您始终可以使用任何JSON提供程序直接反序列化。


PSM*_*PSM 6

“约翰麦地那”做得很好,但你忘了解释一点你的解决方案,以便人们更好地理解这个想法。我以同样的方式完成了它,但这里是完整的解释,以便以这种方式使用它......

appsetting.JSON 示例:

{
    "Email": {
        "Host": "smtp.office365.com",
        "Port": "587",
        "From": "user@domain.com",
        "Username": "user@domain.com",
        "Password": "IsAAbbUaa22YTHayTJKv44Zfl18BClvpAC33Dn5p4s="
    }
}
Run Code Online (Sandbox Code Playgroud)

POCO 类示例:

namespace AppSettingsTest
{
    public class AppSettings
    {
        public Email Email { get; set; }
    }

    public class Email
    {
        public string Host { get; set; }
        public int Port { get; set; }
        public string From { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

获取 appsetting.JSON 内容示例:

    using (var reader = new StreamReader(Directory.GetCurrentDirectory() + "/appsettings.json")) {
        var appSettings = JsonConvert.DeserializeObject<AppSettings>(reader.ReadToEnd());
    }
Run Code Online (Sandbox Code Playgroud)

注意:只需确保将属性选项“复制到输出目录”中的“始终复制”设置为 JSON 文件。

快乐编码!