Update con gestione JSON

This commit is contained in:
Samuele Locatelli
2021-05-26 18:48:47 +02:00
parent 7227aacbd3
commit 8cd2e5c757
3 changed files with 111 additions and 7 deletions
+99 -7
View File
@@ -1,4 +1,5 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Reflection;
@@ -49,6 +50,11 @@ namespace WebConfigSetter
if (args == null || args.Length == 0)
{
Console.WriteLine(separatore);
Console.WriteLine("WebConfigSetter: Gestione configurazione config file per web applications");
Console.WriteLine("");
Console.WriteLine("Processa i file di applicazioni asp.net (XML) e dotnet core (Json), per queste ultime partendo dalla versione appsettings.Production.json");
Console.WriteLine(separatore);
Console.WriteLine("");
Console.WriteLine("Sintassi: WebConfigSetter.exe $1 $2 $3");
Console.WriteLine("$1: Modalità operativa (0=read, 1=write)");
Console.WriteLine("$2: WebApp directory di base");
@@ -132,13 +138,20 @@ namespace WebConfigSetter
private static void readConfToFiles()
{
// cerca i file we.config dalla folder richiesta in giù...
string[] configFiles = Directory.GetFiles(baseWebAppDir, "web.config", SearchOption.AllDirectories);
XmlDocument doc = new XmlDocument();
foreach (var item in configFiles)
// cerca i file web.config dalla folder richiesta in giù...
string[] configFilesXml = Directory.GetFiles(baseWebAppDir, "web.config", SearchOption.AllDirectories);
string[] configFilesJson = Directory.GetFiles(baseWebAppDir, "appsettings.Production.json", SearchOption.AllDirectories);
// se fosse vuoto usa invece il file base
if (configFilesJson.Length == 0)
{
Console.WriteLine($"Found: {item}");
configFilesJson = Directory.GetFiles(baseWebAppDir, "appsettings.json", SearchOption.AllDirectories);
}
// STEP 1: processo files XML (stile asp.net <= 4.8)
XmlDocument doc = new XmlDocument();
foreach (var item in configFilesXml)
{
Console.WriteLine($"XML Found: {item}");
doc = new XmlDocument();
doc.Load(item);
@@ -168,6 +181,36 @@ namespace WebConfigSetter
}
}
// STEP 2: processo files json (stile dotnetcore >= 5.0)
jsonAppConfig currJsonConf = new jsonAppConfig();
foreach (var item in configFilesJson)
{
Console.WriteLine($"JSON Found: {item}");
string currFileData = File.ReadAllText(item);
if (!string.IsNullOrEmpty(currFileData))
{
try
{
currJsonConf = JsonConvert.DeserializeObject<jsonAppConfig>(currFileData);
}
catch (Exception exc)
{
Console.WriteLine($"Eccezione in decodifica item {item}{Environment.NewLine}{exc}");
}
if (currJsonConf.ConnectionStrings != null)
{
foreach (var chiave in currJsonConf.ConnectionStrings)
{
if (!currConfig.jsonConnStrRules.ContainsKey(chiave.Key))
{
currConfig.jsonConnStrRules.Add(chiave.Key, chiave.Value);
}
}
}
}
}
// serializzo!
string rawData = JsonConvert.SerializeObject(currConfig, Newtonsoft.Json.Formatting.Indented);
@@ -188,11 +231,13 @@ namespace WebConfigSetter
// cerca i file we.config dalla folder richiesta in giù...
string[] configFiles = Directory.GetFiles(baseWebAppDir, "web.config", SearchOption.AllDirectories);
string[] configFilesJson = Directory.GetFiles(baseWebAppDir, "appsettings*.json", SearchOption.AllDirectories);
XmlDocument doc = new XmlDocument();
// STEP 1: processo files XML (stile asp.net <= 4.8)
foreach (var item in configFiles)
{
Console.Write($"Found: {item} --> ");
Console.Write($"XML Found: {item} --> ");
doc = new XmlDocument();
doc.Load(item);
@@ -227,6 +272,53 @@ namespace WebConfigSetter
doc.Save(item);
Console.WriteLine(" values updated!");
}
// STEP 2: processo files json (stile dotnetcore >= 5.0)
JToken currJsonConf;
foreach (var item in configFilesJson)
{
Console.Write($"JSON Found: {item} --> ");
string currFileData = File.ReadAllText(item);
bool changed = false;
if (!string.IsNullOrEmpty(currFileData))
{
try
{
//currJsonConf = JsonConvert.DeserializeObject<jsonAppConfig>(currFileData);
currJsonConf = JToken.Parse(currFileData);
if (currJsonConf.HasValues)
{
if (currJsonConf["ConnectionStrings"] != null)
{
foreach (var keySubst in currConfig.jsonConnStrRules)
{
if (currJsonConf["ConnectionStrings"][keySubst.Key] != null)
{
currJsonConf["ConnectionStrings"][keySubst.Key].Replace(keySubst.Value);
changed = true;
}
}
}
}
string newFileData = JsonConvert.SerializeObject(currJsonConf, Newtonsoft.Json.Formatting.Indented);
if (changed)
{
// ora lo SALVO (il documento...)
File.WriteAllText(item, newFileData);
Console.WriteLine(" values updated!");
}
else
{
Console.WriteLine("...no change...");
}
}
catch (Exception exc)
{
Console.WriteLine($"Eccezione in decodifica item {item}{Environment.NewLine}{exc}");
}
}
}
}
else
{