【问题标题】:Access appsettings.json from .NET 4.5.2 project从 .NET 4.5.2 项目访问 appsettings.json
【发布时间】:2017-09-05 11:34:43
【问题描述】:

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

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

在我的 4.5.2 项目中尝试过,但没有成功:

var mailServer = ConfigurationManager.AppSettings["MailServer"];

如何访问 4.5.2 项目中的值?

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    ConfigurationManager 与具有specific format 且不知道如何读取自定义 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"]
    

    当然,由于appsettings.json 是一个简单的 JSON 文件,您可以随时使用任何 JSON 提供程序直接反序列化。

    【讨论】:

    • 在我的情况下需要使用 SetBasePath var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(filepath);
    • 请注意,Directory.GetCurrentDirectory() 通常只会返回 windows 文件夹...最好使用 AppDomain.CurrentDomain.BaseDirectory 来获取实际的应用程序路径(更多信息在这里 - stackoverflow.com/questions/6041332/…)跨度>
    • Microsoft.Extensions.Configuration 不适用于 .net framework 4.5
    【解决方案2】:

    做得很好“Johann Medina”,但你忘了解释一下你的解决方案,以便人们更好地理解这个想法。我也是这样做的,但这里是完整的解释,以便以这种方式使用它......

    appsetting.JSON 示例:

    {
        "Email": {
            "Host": "smtp.office365.com",
            "Port": "587",
            "From": "user@domain.com",
            "Username": "user@domain.com",
            "Password": "IsAAbbUaa22YTHayTJKv44Zfl18BClvpAC33Dn5p4s="
        }
    }
    

    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; }
        }
    }
    

    获取 appsetting.JSON 内容示例:

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

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

    编码愉快!

    【讨论】:

      【解决方案3】:

      这个呢?

      using (var reader = new StreamReader(Directory.GetCurrentDirectory() + "/appsettings.json"))
          Settings = JsonConvert.DeserializeObject<Settings>(reader.ReadToEnd());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        相关资源
        最近更新 更多