Update con gestione JSON
This commit is contained in:
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user