Contamos con el hallazgo a esta impedimento, o por lo menos eso deseamos. Si tienes interrogantes puedes dejarlo en el apartado de preguntas y sin dudarlo te ayudaremos
Solución:
Básicamente puede establecer los valores en IConfiguration
como esto:
IConfiguration configuration = ...
// ...
configuration["key"] = "value";
El problema es que, por ejemplo, el JsonConfigurationProvider
no implementa el guardado de la configuración en el archivo. Como puede ver en la fuente, no anula el método Set de ConfigurationProvider
. (ver fuente)
Puede crear su propio proveedor e implementar el ahorro allí. Aquí (muestra básica del proveedor personalizado de Entity Framework) hay un ejemplo de cómo hacerlo.
Aquí hay un artículo relevante de Microsoft sobre la configuración de las aplicaciones .Net Core:
Configuración principal de Asp.Net
La página también tiene un código de muestra que también puede ser útil.
Actualizar
Pensé que el proveedor en memoria y el enlace a una clase POCO podrían ser de alguna utilidad, pero no funciona como esperaba OP.
La siguiente opción puede ser configurar reloadOnChange
parámetro de AddJsonFile para true mientras agrega el archivo de configuración y analiza manualmente el archivo de configuración JSON y realiza los cambios según lo previsto.
public class Startup
...
public Startup(IHostingEnvironment env)
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.env.EnvironmentName.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
...
…
reloadOnChange
solo se admite en ASP.NET Core 1.1 y versiones posteriores.
Actualice el archivo appsettings.json en el tiempo de ejecución central de asp.net
Ejemplo de archivo appsettings.json
Config:
IsConfig: false
Código para actualizar la propiedad IsConfig a true
Main()
AddOrUpdateAppSetting("Config:IsConfig", true);
public static void AddOrUpdateAppSetting(string key, T value)
try
var filePath = Path.Combine(AppContext.BaseDirectory, "appSettings.json");
string json = File.ReadAllText(filePath);
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
var sectionPath = key.Split(":")[0];
if (!string.IsNullOrEmpty(sectionPath))
var keyPath = key.Split(":")[1];
jsonObj[sectionPath][keyPath] = value;
else
jsonObj[sectionPath] = value; // if no sectionpath just set the value
string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(filePath, output);
catch (ConfigurationErrorsException)
Console.WriteLine("Error writing app settings");
Calificaciones y comentarios
Recuerda algo, que tienes la opción de interpretar tu experiencia si acertaste tu enigma .