From eeb190f8d8889739a5ae33d96cd3347f9c6ca019 Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Mon, 26 Aug 2024 12:28:32 +0200 Subject: [PATCH] v1.27.2.0 - DB lista előállításának gyorsítása --- Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs | 342 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- 2 files changed, 178 insertions(+), 168 deletions(-) diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs index c08618e..6cbb980 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs @@ -38,6 +38,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS #region Execute public static object Execute(object o1 = null, object o2 = null) { + ServerConnectionPool.Init(); var args = (o1 as Menu.ExecutorParameter).Args; var functionkey = CommandLine.GetCommandLineArgument(args, CLP.CMD_FUNCTION); @@ -910,7 +911,7 @@ GO menufct.ClearMenuItemList(); foreach (var def in defList) { - var st = SQLDataBaseManagerCore.CollectDataBaseInfo(def); + var st = def.CollectInfo(); menufct.AddMenuItem(new Menu.Item(def.Xml_Key, null, null, new Menu.ExecutorParameter(pars: st))); } if (!silent) { menufct.DisplayItems(1); } @@ -921,14 +922,15 @@ GO private static object DisplayDataBaseInfo(object obj, int lineix) { SQLDataBase st = (obj as Menu.ExecutorParameter).Parameters as SQLDataBase; + //SQLDataBaseManagerCore.GetPhysicalFilesLocationAndSize(st.SQLCS,out string dbsizetext,out string dbpathtext); if (lineix == 0) { ColorConsole.Write($"{st.Xml_Description}", ConsoleColor.Black, ConsoleColor.White); - var statuscolor = st.Status == SQLDataBaseManagerCore.SQLDBStatus.NoAccess ? ConsoleColor.Red:ConsoleColor.Green; + var statuscolor = st.Status == SQLDataBase.SQLDBStatus.NoAccess ? ConsoleColor.Red:ConsoleColor.Green; ColorConsole.Write(st.Status.ToString(), statuscolor, bracket: "[]", prefix: " ", suffix: ". "); ColorConsole.Write(st.DBName, statuscolor, bracket: "[]", prefix: "Database ", suffix: ". "); ColorConsole.Write(st.DataSource, statuscolor, bracket: "[]", prefix: "from server ", suffix: ". "); - if (st.Status != SQLDataBaseManagerCore.SQLDBStatus.NoAccess) + if (st.Status != SQLDataBase.SQLDBStatus.NoAccess) { } if (st.Xml_IsRemoteDB) { ColorConsole.Write("REMOTE", ConsoleColor.Cyan, bracket: "[]", prefix: "", suffix: ""); } @@ -949,15 +951,13 @@ GO } else if (lineix == 3) { - var phypath = (SQLDataBaseManagerCore.GetPhysicalFilesLocation(st.SQLCS))??"ERR"; - ColorConsole.Write($"{phypath}", ConsoleColor.Yellow, prefix: "DB files physical location:", suffix: " "); + ColorConsole.Write($"{st.PhysicalFilesDirectoryPath}", ConsoleColor.Yellow, prefix: "DB files physical location:", suffix: " "); ColorConsole.WriteLine(" "); return " "; } else if (lineix == 4) { - var dbsize = SQLDataBaseManagerCore.GetSize(st.SQLCS); - ColorConsole.Write(dbsize, ConsoleColor.Yellow, prefix: "DB size:", suffix: " "); + ColorConsole.Write(st.SizeString, ConsoleColor.Yellow, prefix: "DB size:", suffix: " "); ColorConsole.WriteLine(" "); return " "; } @@ -980,29 +980,6 @@ GO #region class SQLDataBaseManager public static class SQLDataBaseManagerCore { - #region public CollectDataBaseInfo - public static SQLDataBase CollectDataBaseInfo(SQLDataBase sqld) - { - try - { - sqld.PhysicalFilesDirectoryPath = (GetPhysicalFilesLocation(sqld.SQLCS)) ?? ""; - sqld.Status = string.IsNullOrWhiteSpace(sqld.PhysicalFilesDirectoryPath)? SQLDBStatus.NoAccess: SQLDBStatus.OK; - sqld.DBName = GetDBName(sqld.SQLCS); - sqld.DataSource = GetDataSource(sqld.SQLCS); - sqld.SizeString = GetSize(sqld.SQLCS); - } - catch - { - sqld.Status = SQLDBStatus.NoAccess; - sqld.PhysicalFilesDirectoryPath = ""; - sqld.DBName = GetDBName(sqld.SQLCS); - sqld.DataSource = GetDataSource(sqld.SQLCS); - sqld.SizeString = ""; - } - return sqld; - } - #endregion public CollectDataBaseInfo - public static void RelocatePhysicalFiles(SQLDataBase sqld, string targetdirectory, string restoredbname) { var dbbackupfilepath = CreateBackup(sqld, false,null); @@ -1055,7 +1032,7 @@ GO Server sqlserver = null; try { - var sc = GetSqlConnection(sqlcs, "master"); + var sc = ServerConnectionPool.GetSqlConnection(sqlcs, "master"); sqlserver = SQLServerConnect(sc);if (sqlserver == null) { return; } var smoRestore = new Restore(); @@ -1261,9 +1238,8 @@ GO } public static void CreateUser(string sqldbconnectionString, string dbusername, string dbrolenamecommalist,string loginname) { - using (SqlConnection connection = new SqlConnection(sqldbconnectionString)) + using (SqlConnection connection = ServerConnectionPool.GetSqlConnection(sqldbconnectionString,open:true)) { - connection.Open(); // Create user //USE [LearALM2] //DROP USER[datareader] @@ -1351,7 +1327,7 @@ GO Server sqlserver = null; try { - var sc = GetSqlConnection(sqldbconnectionString,null, grantoruser, grantoruserpsw); + var sc = ServerConnectionPool.GetSqlConnection(sqldbconnectionString,null, grantoruser, grantoruserpsw); sqlserver = SQLServerConnect(sc); if (sqlserver == null) return; Login login = new Login(sqlserver, name); login.LoginType = logintype; @@ -1406,7 +1382,7 @@ GO Server sqlserver = null; try { - var sc = GetSqlConnection(cs, dbname:databasename, userid: userid, userpassword: password); + var sc = ServerConnectionPool.GetSqlConnection(cs, dbname:databasename, userid: userid, userpassword: password); sqlserver = SQLServerConnect(sc); if (sqlserver == null) return false; if (sqlserver.Databases.Contains(databasename)) { @@ -1426,7 +1402,7 @@ GO Dictionary ReturnDict = new Dictionary(); try { - var sc = GetSqlConnection(cs, dbname: null, userid: userid, userpassword: password); + var sc = ServerConnectionPool.GetSqlConnection(cs, dbname: null, userid: userid, userpassword: password); sqlserver = SQLServerConnect(sc); if (sqlserver == null) return null; foreach (Database db in sqlserver.Databases) @@ -1489,18 +1465,9 @@ GO var sqlcb = new SqlConnectionStringBuilder(cs); return sqlcb.DataSource; } - public enum SQLDBStatus { NoAccess, OK, } - public static SqlConnection GetSqlConnection(string sqlconnectionstring, string dbname = null, string userid = null, string userpassword = null) - { - var scb = new SqlConnectionStringBuilder(sqlconnectionstring); - if (!string.IsNullOrWhiteSpace(dbname)) { scb.InitialCatalog = dbname; } - if (!string.IsNullOrWhiteSpace(userid) && !string.IsNullOrWhiteSpace(userpassword)) { scb.UserID = userid; scb.Password = userpassword; } - else if (!string.IsNullOrWhiteSpace(userid) && string.IsNullOrWhiteSpace(userpassword)) { scb.UserID= userid; scb.IntegratedSecurity= true; } - return new SqlConnection(scb.ToString()); - } public static Server SQLServerConnect(string sqlconnectionstring,string dbname=null) { - return SQLServerConnect(GetSqlConnection(sqlconnectionstring, dbname)); + return SQLServerConnect(ServerConnectionPool.GetSqlConnection(sqlconnectionstring, dbname)); } public static Server SQLServerConnect(SqlConnection sqlconnection) { @@ -1523,7 +1490,7 @@ GO public static void ShrinkDB(string sqlconnectionstring, ShrinkMethod shrinkmethod,int freespacepercent) { - using (var sqlc = new SqlConnection(sqlconnectionstring)) + using (var sqlc =ServerConnectionPool.GetSqlConnection(sqlconnectionstring,open:false)) { var sc = new ServerConnection(sqlc); var srvr = new Server(sc); @@ -1532,74 +1499,13 @@ GO } } - #region GetSize - /// - /// Visszadja a megadott adatbázis méretét - /// - /// - /// - public static string GetSize(string sqlconnectionstring) - { - try - { - using (var sqlc = new Microsoft.Data.SqlClient.SqlConnection(sqlconnectionstring)) - { - var dbname = GetDBName(sqlconnectionstring); - - var getsizecmd = new Microsoft.Data.SqlClient.SqlCommand("sp_spaceused", sqlc); - getsizecmd.CommandType = System.Data.CommandType.StoredProcedure; - sqlc.Open(); - var reader = getsizecmd.ExecuteReader(); - - if (reader.HasRows) - { - while (reader.Read()) - { - var dbn = reader["database_name"]; - var dbs = reader["database_size"]; - if (Convert.ToString(dbn) == dbname) { return Convert.ToString(dbs); }; - } - } - sqlc.Close(); - } - return "N/A"; - } - catch { return "ERR"; } - } - #endregion GetSize - - #region GetPhysicalFilesLocation - /// - /// Returns the physical path to the directory that holds the files of the database - /// - /// - /// the path, or null, if any error occurs - public static string GetPhysicalFilesLocation(string sqlconnectionstring) - { - try - { - int commandtimeout = 5000; - string scripttext = ""; - scripttext += " DECLARE @physicalpath varchar(1000) = NULL;"; - scripttext += " SELECT @physicalpath = f.physical_name"; - scripttext += " FROM sys.master_files as f inner join sys.databases as d on f.database_id = d.database_id"; - scripttext += " where d.name = '{DATABASE}' and f.type_desc = 'ROWS';"; - scripttext += " SELECT 1 AS RETURNCODE, @physicalpath AS RETURNMESSAGE;"; - var vars = new Dictionary(); - vars.Add(nameof(DBSubstitutionName.DATABASE), GetDBName(sqlconnectionstring)); - vars.Add(nameof(DBSubstitutionName.DATASOURCE), ""); - var result = ExecuteSQLScript(sqlconnectionstring, scripttext, commandtimeout, vars); - if (result.ReturnValue != 0) { return Path.GetDirectoryName(result.ReturnMessage); } else { return null; }; - } - catch { return null; } - } - #endregion GetPhysicalFilesLocation #region DBSubstitution public enum DBSubstitutionName { DBKEY,DATABASE,DATASOURCE,DBOTYPE,DBONAME,DBDATAGROUP,BACKUPTS,SHRINKOPTION,SHRINKFREESPACEPERCENT, } #endregion DBSubstitution + #region ExecuteSQLScript /// /// Egy SQL script végrehajtása (GO-val lezárt batch-eket tartalmazhat) @@ -1621,66 +1527,55 @@ GO /// public static ReturnInfoJSON ExecuteSQLScript(string sqlconnectionstring, string sqltxt, int commandtimeout, Dictionary vars) { - using (var sqlc = new Microsoft.Data.SqlClient.SqlConnection(sqlconnectionstring)) - { - sqltxt = VRH.Common.StringConstructor.ResolveConstructorR(vars, sqltxt, "{}@@"); - - sqlc.Open(); - string SQLBatchTxt = ""; // ebben lesznek az sql script-en belüli batch-ek összerakva - int SQLBatchIndex = 0; // az aktuális batch indexe - int scriptlineindex = 0; // az aktuális script sor indexe - System.Data.DataSet DataSet = null; // ebben lesz az eredmény (az utolsó batch eredménye) - sqltxt += "\r\nGO";// ha esetleg nem lenne, odatesszük a végére az utolsó batch-et lezáró GO-t - foreach (var scriptline in sqltxt.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)) + using (var sqlc = ServerConnectionPool.GetSqlConnection(sqlconnectionstring,open:true)) { return ExecuteSQLScript(sqlc,sqltxt, commandtimeout, vars); } + } + public static ReturnInfoJSON ExecuteSQLScript(SqlConnection sqlconnection, string sqltxt, int commandtimeout, Dictionary vars) + { + sqltxt = VRH.Common.StringConstructor.ResolveConstructorR(vars, sqltxt, "{}@@"); + + var connectionwasopen = true; + if (sqlconnection.State != System.Data.ConnectionState.Open) { ServerConnectionPool.Open(sqlconnection); connectionwasopen = false; } + string SQLBatchTxt = ""; // ebben lesznek az sql script-en belüli batch-ek összerakva + int SQLBatchIndex = 0; // az aktuális batch indexe + int scriptlineindex = 0; // az aktuális script sor indexe + System.Data.DataSet DataSet = null; // ebben lesz az eredmény (az utolsó batch eredménye) + sqltxt += "\r\nGO";// ha esetleg nem lenne, odatesszük a végére az utolsó batch-et lezáró GO-t + foreach (var scriptline in sqltxt.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)) + { + scriptlineindex += 1; + if (Regex.Match(scriptline, @"^GO$").Success)// a batch utolső sora { - scriptlineindex += 1; - if (Regex.Match(scriptline, @"^GO$").Success)// a batch utolső sora - { - if (!string.IsNullOrWhiteSpace(SQLBatchTxt)) - { - SQLBatchIndex += 1; - DataSet = ExecuteSQLScriptBatch(sqlc, SQLBatchTxt, commandtimeout); - SQLBatchTxt = ""; - } - } - else if (!string.IsNullOrWhiteSpace(scriptline)) + if (!string.IsNullOrWhiteSpace(SQLBatchTxt)) { - SQLBatchTxt += scriptline + "\r\n"; + SQLBatchIndex += 1; + var sqlcommand = sqlconnection.CreateCommand(); + sqlcommand.CommandText = SQLBatchTxt; + sqlcommand.CommandTimeout = commandtimeout; + var DataAdapter = new Microsoft.Data.SqlClient.SqlDataAdapter(sqlcommand); + DataSet = new System.Data.DataSet(); + DataAdapter.Fill(DataSet); + SQLBatchTxt = ""; } } - - sqlc.Close(); - try + else if (!string.IsNullOrWhiteSpace(scriptline)) { - var firstreturnedtable = DataSet.Tables[0]; - var firstreturnedrow = firstreturnedtable.Rows[0]; - var firstreturnedvalue = firstreturnedrow[0]; - var secondreturnedvalue = firstreturnedrow[1]; - var rv = Convert.ToInt32(firstreturnedvalue); - var rm = Convert.ToString(secondreturnedvalue); - return new ReturnInfoJSON() { ReturnValue = rv, ReturnMessage = rm, }; + SQLBatchTxt += scriptline + "\r\n"; } - catch { } } - return new ReturnInfoJSON() { ReturnValue = 0, ReturnMessage = null, }; - } - /// - /// Egy SQL batch végrehajtása - /// - /// - /// - /// - /// - private static System.Data.DataSet ExecuteSQLScriptBatch(Microsoft.Data.SqlClient.SqlConnection sqlc, string sqlbatchtxt, int commandtimeout) - { - var sqlcommand = sqlc.CreateCommand(); - sqlcommand.CommandText = sqlbatchtxt; - sqlcommand.CommandTimeout = commandtimeout; - var DataAdapter = new Microsoft.Data.SqlClient.SqlDataAdapter(sqlcommand); - var DataSet = new System.Data.DataSet(); - DataAdapter.Fill(DataSet); - return DataSet; + if (!connectionwasopen) { sqlconnection.Close(); } + try + { + var firstreturnedtable = DataSet.Tables[0]; + var firstreturnedrow = firstreturnedtable.Rows[0]; + var firstreturnedvalue = firstreturnedrow[0]; + var secondreturnedvalue = firstreturnedrow[1]; + var rv = Convert.ToInt32(firstreturnedvalue); + var rm = Convert.ToString(secondreturnedvalue); + return new ReturnInfoJSON() { ReturnValue = rv, ReturnMessage = rm, }; + } + catch { } + return new ReturnInfoJSON() { ReturnValue = 0, ReturnMessage = null, }; } #endregion ExecuteSQLScript #region ExecuteSQLStoredProcedure @@ -1722,18 +1617,17 @@ GO public static List ExecuteSQLStoredProcedure(string sqlconnectionstring, string storedprocedurename, int commandtimeout, List SPparameters) { - using (var sqlc = new Microsoft.Data.SqlClient.SqlConnection(sqlconnectionstring)) - { + using (var sqlc = ServerConnectionPool.GetSqlConnection(sqlconnectionstring,open:true)) + { var sqlcommand = sqlc.CreateCommand(); sqlcommand.Connection = sqlc; sqlcommand.CommandText = storedprocedurename; sqlcommand.CommandTimeout = commandtimeout; sqlcommand.CommandType = System.Data.CommandType.StoredProcedure; //var DataAdapter = new Microsoft.Data.SqlClient.SqlDataAdapter(sqlcommand); - sqlc.Open(); foreach (var p in SPparameters) { - var sqlparameter = new Microsoft.Data.SqlClient.SqlParameter() + var sqlparameter = new SqlParameter() { ParameterName = p.Name, SqlDbType = p.Type, @@ -2077,7 +1971,7 @@ GO public string DBName; public string DataSource; - public SQLDataBaseManagerCore.SQLDBStatus Status; + public SQLDBStatus Status; public string PhysicalFilesDirectoryPath; public string SizeString; public string SQLCS @@ -2085,6 +1979,81 @@ GO get { return XmlProcessing.ConnectionStringStore.GetSQL(this.Xml_SQLConnectionString); } } #endregion fields + public enum SQLDBStatus { NoAccess, OK, } + + #region CollectInfo + public SQLDataBase CollectInfo() + { + try + { + GetPhysicalFilesLocationAndSize(this.SQLCS, out this.SizeString, out this.PhysicalFilesDirectoryPath); + this.Status = this.PhysicalFilesDirectoryPath=="ERR" ? SQLDBStatus.NoAccess : SQLDBStatus.OK; + this.DBName = SQLDataBaseManagerCore.GetDBName(this.SQLCS); + this.DataSource = SQLDataBaseManagerCore.GetDataSource(this.SQLCS); + } + catch + { + this.Status = SQLDBStatus.NoAccess; + this.PhysicalFilesDirectoryPath = ""; + this.DBName = SQLDataBaseManagerCore.GetDBName(this.SQLCS); + this.DataSource = SQLDataBaseManagerCore.GetDataSource(this.SQLCS); + this.SizeString = ""; + } + return this; + } + #endregion CollectInfo + + #region GetPhysicalFilesLocationAndSize + /// + /// Visszadja a megadott adatbázis méretét + /// + /// + /// + private void GetPhysicalFilesLocationAndSize(string sqlconnectionstring, out string dbsizetext, out string dbpathtext) + { + dbsizetext = null; + dbpathtext = null; + try + { + var sqlc = ServerConnectionPool.GetSqlConnection(sqlconnectionstring,open:true); + string dbname = SQLDataBaseManagerCore.GetDBName(sqlconnectionstring); + try + { + var getsizecmd = new SqlCommand("sp_spaceused", sqlc); + getsizecmd.CommandType = System.Data.CommandType.StoredProcedure; + var reader = getsizecmd.ExecuteReader(); + + if (reader.HasRows) + { + while (reader.Read()) { if (Convert.ToString(reader["database_name"]) == dbname) { dbsizetext = Convert.ToString(reader["database_size"]); break; }; } + } + dbsizetext = dbsizetext ?? "N/A"; + } + catch { } + + try + { + int commandtimeout = 5000; + string scripttext = ""; + scripttext += " DECLARE @physicalpath varchar(1000) = NULL;"; + scripttext += " SELECT @physicalpath = f.physical_name"; + scripttext += " FROM sys.master_files AS f INNER JOIN sys.databases AS d ON f.database_id = d.database_id"; + scripttext += " WHERE d.name = '{DATABASE}' AND f.type_desc = 'ROWS';"; + scripttext += " SELECT 1 AS RETURNCODE, @physicalpath AS RETURNMESSAGE;"; + var vars = new Dictionary(); + vars.Add(nameof(SQLDataBaseManagerCore.DBSubstitutionName.DATABASE), dbname); + vars.Add(nameof(SQLDataBaseManagerCore.DBSubstitutionName.DATASOURCE), ""); + var result = SQLDataBaseManagerCore.ExecuteSQLScript(sqlc, scripttext, commandtimeout, vars); + if (result.ReturnValue != 0) { dbpathtext = Path.GetDirectoryName(result.ReturnMessage); } + } + catch { } + sqlc.Close(); + } + catch { } + dbsizetext = dbsizetext ?? "ERR"; + dbpathtext = dbpathtext ?? "ERR"; + } + #endregion GetPhysicalFilesLocationAndSize #region basic constructor public SQLDataBase() { } @@ -2265,4 +2234,45 @@ GO #endregion SQLData class } #endregion SQLDataBase class + + public static class ServerConnectionPool + { + private static List InaccessibleConnectionList = new List(); + public static SqlConnection GetSqlConnection(string sqlconnectionstring, string dbname = null, string userid = null, string userpassword = null,bool open=false) + { + var scb = new SqlConnectionStringBuilder(sqlconnectionstring); + if (!string.IsNullOrWhiteSpace(dbname)) { scb.InitialCatalog = dbname; } + if (!string.IsNullOrWhiteSpace(userid) && !string.IsNullOrWhiteSpace(userpassword)) { scb.UserID = userid; scb.Password = userpassword; } + else if (!string.IsNullOrWhiteSpace(userid) && string.IsNullOrWhiteSpace(userpassword)) { scb.UserID = userid; scb.IntegratedSecurity = true; } + var sqlc = new SqlConnection(scb.ToString()); + if (open) Open(sqlc); + return sqlc; + } + public static void Open(SqlConnection sqlc) + { + if (IsMasterInacessible(sqlc) || IsInacessible(sqlc)) + { + throw new Exception($"DB {sqlc.Database} on server {sqlc.DataSource} is inaccessible!"); + } + try { sqlc.Open(); } + catch (Exception ex) + { + MarkMasterInacessible(sqlc); + MarkInacessible(sqlc); + throw ex; + } + } + private static bool IsMasterDBConnected(SqlConnection sqlc) + { + try { (new SqlConnection((new SqlConnectionStringBuilder(sqlc.ConnectionString) { InitialCatalog = "master" }).ToString())).Open(); return true; } + catch { return false; } + } + private static string MasterDBId(SqlConnection sqlc) { return sqlc.DataSource + "#master"; } + private static string DBId(SqlConnection sqlc) { return sqlc.DataSource + "#" + sqlc.Database; } + private static bool IsInacessible(SqlConnection sqlc) { return InaccessibleConnectionList.Contains(DBId(sqlc)); } + private static bool IsMasterInacessible(SqlConnection sqlc) { return InaccessibleConnectionList.Contains(MasterDBId(sqlc)); } + private static void MarkInacessible(SqlConnection sqlc) { if (!IsInacessible(sqlc)) { InaccessibleConnectionList.Add(DBId(sqlc)); }} + private static void MarkMasterInacessible(SqlConnection sqlc) { if (!IsMasterInacessible(sqlc)) { InaccessibleConnectionList.Add(MasterDBId(sqlc)); } } + public static void Init() { InaccessibleConnectionList.Clear(); } + } } diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index 6494767..f22f04c 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.27.1.0")] -[assembly: AssemblyFileVersion("1.27.1.0")] +[assembly: AssemblyVersion("1.27.2.0")] +[assembly: AssemblyFileVersion("1.27.2.0")] -- libgit2 0.21.2