.NET Core中的用户配置设置 - c#

我昨天花了一整天的时间对此进行研究,找不到任何合理的解决方案。

我正在将.NET Framework项目移植到.NET Core 2.0。该项目使用用户设置(Properties.Settings.Default)来存储某些信息,这些信息在每次启动应用程序时都会保留。它还可以更新此信息(例如,用户首选项)。

我的理解是.NET Core中不存在吗?那么如何实现呢?我能找到的最接近的东西是安装一些NuGet软件包并使用Microsoft.Extensions.Configuration,但是,这甚至与.NET Framework中的Properties.Settings.Default并不接近。

首先,它需要一个文件(JSON,XML,您拥有什么)位于运行文件的目录中。这似乎很疯狂,尤其是在安全信息的情况下。另外,当项目的内部库应该能够处理所有配置文件时,例如.NET Framework,我不想随项目一起推送配置文件。

我意识到有环境变量,但是我无法终生使用它们。老实说这应该是一个简单的过程,所以我不确定是否遗漏了明显的东西。在我的库的Properties> Debug部分中,有一个称为“环境变量”的部分,在其中添加了两个值。

.NET Core中的用户配置设置 - c#

我的配置对象如下所示:

private static IConfiguration Configuration { get; } = new ConfigurationBuilder()
    //.SetBasePath(Directory.GetCurrentDirectory())
    //.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

要访问变量,我尝试了以下方法:

Configuration.GetSection("SettingName").Value;
Configuration["SettingName"];
Environment.GetEnvironmentVariable("SettingName");

他们都返回空。

此外,没有办法保存财产吗?我知道它的设计重量很轻,但是肯定有节省的方法吗?

我试过了:

Configuration["SettingName"] = "Value";
Environment.SetEnvironmentVariable("SettingName", "Value");

似乎更新了内存,但没有更新文件本身,这使持久性设置无效。

如何将用户设置包含在库中,同时又如何将其保存在库中?

参考方案

我创建了一个静态类,供用户在需要时访问。这不是完美的方法,但是它是强类型的,只有在访问默认属性时才创建。

我打算使用DI将配置放入每个类的属性中,但是在某些情况下,我希望将类包含在构造函数中。

用:

public MainWindow()
{
    InitializeComponent();

    var t = AppSettings.Default.Theme;
    AppSettings.Default.Theme += "b";
    AppSettings.Default.Save();
}

班上:

using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace TestClient
{

    public class AppSettings
    {
        private AppSettings()
        {
            // marked as private to prevent outside classes from creating new.
        }

        private static string _jsonSource;
        private static AppSettings _appSettings = null;
        public static AppSettings Default
        {
            get
            {
                if (_appSettings == null)
                {
                    var builder = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

                    _jsonSource = $"{Directory.GetCurrentDirectory()}{Path.DirectorySeparatorChar}appsettings.json";

                    var config = builder.Build();
                    _appSettings = new AppSettings();
                    config.Bind(_appSettings);
                }

                return _appSettings;
            }
        }

        public void Save()
        {
            // open config file
            string json = JsonConvert.SerializeObject(_appSettings);

            //write string to file
            System.IO.File.WriteAllText(_jsonSource, json);
        }

        public string Theme { get; set; }
    }
}

jQuery发布不会将数据发布到ASP.NET API控制器 - javascript

我有一次噩梦般的时间通过jquery post将数据发送到ASP.NET Controller。这是JSON.stringify之后的数据:[{"scheduleTaskID":"203","task":"Permit","baselineDate":…

.NET C#Webbrowser填充输入,不带ID或类名 - javascript

我需要在网络浏览器中填写一个输入,但这不起作用。我认为必须使用name属性来完成,但是怎么做呢?foreach (HtmlElement login in webBrowser1.Document.GetElementsByTagName("input")) { if (login.GetAttribute("name"…

ddl在服务器中未更新-asp.net - javascript

我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……

asp.net mvc中的对象数组数据始终为null - javascript

我需要通过json将对象数组发送到asp.net mvc 2,但是我在mvc控制器中没有得到null对象是这样的entries[1].date = "12/22/2014" entries[1].Ref = "0002" entries[1].Credit = "100" entries[2].da…

ASP.NET MVC中应为DataTable返回哪种数据? - javascript

我想为DataTable中的每个页面创建动态加载信息。我正在尝试遵循以下示例:https://www.datatables.net/manual/server-sidehttps://www.datatables.net/manual/data来自示例的代码:$('#example').DataTable( { serverSide: t…