From 61f26e69afb1ec3421a0d1abf877e2c34c4e485f Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Sun, 9 Jan 2022 23:01:53 +0100 Subject: [PATCH] [1.6.0] HttpEndpoint added --- Changelog.md | 173 ++++++++++ Utils/FileLogger.cs | 2 +- Utils/HttpEndpoint.cs | 59 ++++ Utils/InIReader.cs | 520 +++++++++++++++---------------- Utils/OwnModel.cs | 46 +-- Utils/Properties/AssemblyInfo.cs | 76 ++--- Utils/Utils.csproj | 39 ++- 7 files changed, 583 insertions(+), 332 deletions(-) create mode 100644 Utils/HttpEndpoint.cs diff --git a/Changelog.md b/Changelog.md index e69de29..0965453 100644 --- a/Changelog.md +++ b/Changelog.md @@ -0,0 +1,173 @@ +# Changelog + +## 1.6.0 - 2022-01-09 - HttpEndpoint added +### New Features +* Add HttpEndpoint +### Bugfixes +### Changes +* Change Readme that its link to the normal repo +* Codingstyles +* Fixing history + +## 1.5.0 - 2021-04-10 - Add GetEvent so you can call events by string; Add OwnSingeton class +### New Features +* More allowed Chars for Chapters in inifile +* Add Contribution, Licence and readme +* Adding netcore +* Add changelog +* Filedhelper to helpter +* CmdArgs improvements +* Make netcore to default +* Add OwnSingleton +### Bugfixes +* WriteLine in Programmlogger sometimes make nonesense +* Writeline event are wrong +### Changes +* Remove the binary files +* Move all Classes to subfolder +* Codingstyles + +## 1.4.0 - 2018-11-27 - Add Helper to Utils +### New Features +* Add Helper +### Bugfixes +### Changes + +## 1.1.3 - 2018-10-02 - Improve CmdArgs +### New Features +* CmdArgs now throw extensions if there is something wrong +### Bugfixes +### Changes + +## 1.1.2 - 2018-09-11 - Tiny Codingstyles +### New Features +### Bugfixes +### Changes +* Codingstyles + +## 1.1.1 - 2018-05-29 - ProgrammLogger neets to cleanup +### New Features +* Delete the Mess behind +### Bugfixes +### Changes + +## 1.1.0 - 2018-05-15 - ProgrammLogger +### New Features +* Add Programmlogger +### Bugfixes +### Changes +* Codingstyles + +## 1.0.7.0 - 2018-05-08 - Yet another IniReader improvemnt round again +### New Features +### Bugfixes +### Changes +* Move searchpath to its own function + +## 1.0.6.0 - 2017-12-22 - Yet another IniReader improvemnt round +### New Features +* Posibillity to add complete sections to an ini file +### Bugfixes +### Changes + +## 1.0.5.2 - 2017-09-26 - And Improve IniReader again +### New Features +* IniReader returns the Sections with or without Brackets now +### Bugfixes +### Changes + +## 1.0.5.1 - 2017-09-24 - Improve IniReader again +### New Features +### Bugfixes +* IniReader now supports umlaute +* IniReader matches with Brackets and without +### Changes + +## 1.0.5.0 - 2017-08-09 - Improve IniReader +### New Features +* IniReader can now return a whole segemt +### Bugfixes +### Changes + +## 1.0.4.1 - 2017-08-08 - Cleanup OwnView +### New Features +### Bugfixes +### Changes +* remove Init from OwnView + +## 1.0.4.0 - 2017-04-30 - More Updater +### New Features +* continue Development of Updater +### Bugfixes +### Changes + +## 1.0.3.2 - 2017-04-26 - Next Updater +### New Features +* continue Development of Updater +### Bugfixes +### Changes + +## 1.0.3.1 - 2017-04-25 - EventArgsHelper +### New Features +* Add EventArgsHelper +### Bugfixes +### Changes +* Codingstyles +* Moves LogEventArgs to EventArgsHelper +* Moves UpdaterEventArgs to EventArgsHelper + +## 1.0.2.6 - 2017-04-24 - Better Updater +### New Features +* Add Updater +* Add Disposable Interface +* Using LogEventArgs now for Logging +* Make UpdaterEventArgs as Child of EventArgs +* Updater now using Ownobject as Parent +* Add VersionsInfo to Updater +* Updater spawns a Background Task to Check for Updates +### Bugfixes +### Changes + +## 1.0.2.5 - 2017-04-19 - Logging in OwnObject +### New Features +* Add Logging to OwnObject +### Bugfixes +* Avoid nullpointer exception in FileMutex +### Changes +* Codingstyles + +## 1.0.2.3 - 2017-04-16 - OwnModel better +### New Features +* Add Remove observer on OwnModel +### Bugfixes +### Changes +* Codingstyles + +## 1.0.2.2 - 2017-03-09 - Make it nice +### New Features +### Bugfixes +### Changes +* Codingstyles + +## 1.0.2.1 - 2017-03-09 - Filemutex +### New Features +* Add Filemutex +### Bugfixes +* Filelogger backet on wrong pos +### Changes + +## 1.0.0.1 - 2016-12-03 - Filelogger improvements +### New Features +* Check Directory and if not exist add it +* Now logs with timestamp +* Can select logdir +* Add Abstract dispose to OwnController +### Bugfixes +### Changes + +## 1.0.0.0 - 2015-11-16 - Init +### New Features +* Add CmdArgs, FileLogger, IniReader, OwnController, OwnModel, OwnObject, OwnView, +### Bugfixes +### Changes + diff --git a/Utils/FileLogger.cs b/Utils/FileLogger.cs index 327c77d..5543ea4 100644 --- a/Utils/FileLogger.cs +++ b/Utils/FileLogger.cs @@ -43,7 +43,7 @@ namespace BlubbFish.Utils _ = Directory.CreateDirectory(v); logDir = v; } - if (logDir.Substring(logDir.Length - 1) != Path.DirectorySeparatorChar.ToString()) { + if (logDir[^1..] != Path.DirectorySeparatorChar.ToString()) { logDir += Path.DirectorySeparatorChar; } } diff --git a/Utils/HttpEndpoint.cs b/Utils/HttpEndpoint.cs new file mode 100644 index 0000000..5b99910 --- /dev/null +++ b/Utils/HttpEndpoint.cs @@ -0,0 +1,59 @@ +using System; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading.Tasks; + +namespace BlubbFish.Utils { + public class HttpEndpoint { + private readonly HttpClient client = new HttpClient(); + private readonly String server = ""; + + public enum RequestMethod { + GET, + POST, + PUT + } + + public HttpEndpoint(String server, String auth = null) { + this.server = server; + if(auth != null) { + this.client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(auth); + } + } + + public HttpEndpoint(String server, (String scheme, String parameter) auth) { + this.server = server; + this.client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(auth.scheme, auth.parameter); + } + + public async Task RequestString(String address, String json = "", Boolean withoutput = true, RequestMethod method = RequestMethod.GET) { + String ret = null; + try { + HttpResponseMessage response = null; + if(method == RequestMethod.POST || method == RequestMethod.PUT) { + HttpContent content = new StringContent(json); + content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + //content.Headers.Add("Content-Type", "application/json"); + if(method == RequestMethod.POST) { + response = await this.client.PostAsync(this.server + address, content); + } else if(method == RequestMethod.PUT) { + response = await this.client.PutAsync(this.server + address, content); + } + content.Dispose(); + } else if(method == RequestMethod.GET) { + response = await this.client.GetAsync(this.server + address); + } + if(!response.IsSuccessStatusCode) { + throw new Exception(response.StatusCode + ": " + response.ReasonPhrase); + } + if(withoutput && response != null) { + ret = await response.Content.ReadAsStringAsync(); + } + } catch(Exception e) { + throw new WebException(String.Format("Error while opening resource: \"{0}\" Method {1} Data {2} Fehler {3}", this.server + address, method, json, e.Message)); + } + return ret; + } + } +} diff --git a/Utils/InIReader.cs b/Utils/InIReader.cs index 1561d72..87951e7 100644 --- a/Utils/InIReader.cs +++ b/Utils/InIReader.cs @@ -1,261 +1,261 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -namespace BlubbFish.Utils { - public class InIReader : IDisposable - { - private Dictionary> inifile; - private readonly FileSystemWatcher k; - private readonly String filename; - private static readonly List search_path = new List() { - Directory.GetCurrentDirectory() - }; - - private static readonly Dictionary instances = new Dictionary(); - - public static void SetSearchPath(List directorys) => search_path.AddRange(directorys); - - public static Boolean ConfigExist(String filename) { - foreach (String path in search_path) { - if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { - return true; - } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { - return true; - } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { - return true; - } - } - return false; - } - - private InIReader(String filename) - { - foreach (String path in search_path) { - if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { - this.filename = path + Path.DirectorySeparatorChar + filename; - this.k = new FileSystemWatcher(path, filename); - break; - } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { - this.filename = path + Path.DirectorySeparatorChar + filename + ".ini"; - this.k = new FileSystemWatcher(path, filename + ".ini"); - break; - } else if(File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { - this.filename = path + Path.DirectorySeparatorChar + filename + ".conf"; - this.k = new FileSystemWatcher(path, filename + ".conf"); - break; - } - } - if(this.filename == null) { - throw new ArgumentException(filename + " not found!"); - } - this.k.Changed += new FileSystemEventHandler(this.ReadAgain); - this.LoadFile(); - } - - /// - /// Gibt eine InIReader-Instanz zu einer Datei zurück - /// - /// Dateiname - /// - public static InIReader GetInstance(String filename) - { - if (!instances.Keys.Contains(filename)) { - instances.Add(filename, new InIReader(filename)); - } - return instances[filename]; - } - - private void ReadAgain(Object sender, EventArgs e) => this.LoadFile(); - - private void LoadFile() - { - this.inifile = new Dictionary>(); - StreamReader file = new StreamReader(this.filename); - List buf = new List(); - String fline = ""; - while (fline != null) { - fline = file.ReadLine(); - if (fline != null && fline.Length > 0 && fline.Substring(0, 1) != ";") { - buf.Add(fline); - } - } - file.Close(); - Dictionary sub = new Dictionary(); - String cap = ""; - foreach (String line in buf) { - Match match = Regex.Match(line, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase); - if (match.Success) { - if (sub.Count != 0 && cap != "") { - this.inifile.Add(cap, sub); - } - cap = line; - sub = new Dictionary(); - } else { - if (line != "" && cap != "") { - String key = line.Substring(0, line.IndexOf('=')); - String value = line.Substring(line.IndexOf('=') + 1); - sub.Add(key, value); - } - } - } - if (sub.Count != 0 && cap != "") { - this.inifile.Add(cap, sub); - } - } - - /// - /// Gibt eine Liste an Sektionen zurück - /// - /// Default = true; false, wenn die Liste ohne Klammern sein soll. - /// - public List GetSections(Boolean withBrackets = true) - { - if(withBrackets) { - return this.inifile.Keys.ToList(); - } else { - List ret = new List(); - foreach (String item in this.inifile.Keys) { - ret.Add(item[1..^1]); - } - return ret; - } - } - - /// - /// Überschreibt eine InI-Datei mit der Kompletten neuen Configuration - /// - /// Neue Konfiguration - public void SetSections(Dictionary> config) { - this.inifile.Clear(); - foreach (KeyValuePair> item in config) { - String key = item.Key; - if(!key.StartsWith("[")) { - key = "[" + key + "]"; - } - if (Regex.Match(key, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase).Success) { - this.inifile.Add(key, item.Value); - } - } - this.Changed(); - } - +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; + +namespace BlubbFish.Utils { + public class InIReader : IDisposable + { + private Dictionary> inifile; + private readonly FileSystemWatcher k; + private readonly String filename; + private static readonly List search_path = new List() { + Directory.GetCurrentDirectory() + }; + + private static readonly Dictionary instances = new Dictionary(); + + public static void SetSearchPath(List directorys) => search_path.AddRange(directorys); + + public static Boolean ConfigExist(String filename) { + foreach (String path in search_path) { + if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { + return true; + } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { + return true; + } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { + return true; + } + } + return false; + } + + private InIReader(String filename) + { + foreach (String path in search_path) { + if (File.Exists(path + Path.DirectorySeparatorChar + filename)) { + this.filename = path + Path.DirectorySeparatorChar + filename; + this.k = new FileSystemWatcher(path, filename); + break; + } else if (File.Exists(path + Path.DirectorySeparatorChar + filename + ".ini")) { + this.filename = path + Path.DirectorySeparatorChar + filename + ".ini"; + this.k = new FileSystemWatcher(path, filename + ".ini"); + break; + } else if(File.Exists(path + Path.DirectorySeparatorChar + filename + ".conf")) { + this.filename = path + Path.DirectorySeparatorChar + filename + ".conf"; + this.k = new FileSystemWatcher(path, filename + ".conf"); + break; + } + } + if(this.filename == null) { + throw new ArgumentException(filename + " not found!"); + } + this.k.Changed += new FileSystemEventHandler(this.ReadAgain); + this.LoadFile(); + } + + /// + /// Gibt eine InIReader-Instanz zu einer Datei zurück + /// + /// Dateiname + /// + public static InIReader GetInstance(String filename) + { + if (!instances.Keys.Contains(filename)) { + instances.Add(filename, new InIReader(filename)); + } + return instances[filename]; + } + + private void ReadAgain(Object sender, EventArgs e) => this.LoadFile(); + + private void LoadFile() + { + this.inifile = new Dictionary>(); + StreamReader file = new StreamReader(this.filename); + List buf = new List(); + String fline = ""; + while (fline != null) { + fline = file.ReadLine(); + if (fline != null && fline.Length > 0 && fline.Substring(0, 1) != ";") { + buf.Add(fline); + } + } + file.Close(); + Dictionary sub = new Dictionary(); + String cap = ""; + foreach (String line in buf) { + Match match = Regex.Match(line, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase); + if (match.Success) { + if (sub.Count != 0 && cap != "") { + this.inifile.Add(cap, sub); + } + cap = line; + sub = new Dictionary(); + } else { + if (line != "" && cap != "") { + String key = line.Substring(0, line.IndexOf('=')); + String value = line[(line.IndexOf('=') + 1)..]; + sub.Add(key, value); + } + } + } + if (sub.Count != 0 && cap != "") { + this.inifile.Add(cap, sub); + } + } + + /// + /// Gibt eine Liste an Sektionen zurück + /// + /// Default = true; false, wenn die Liste ohne Klammern sein soll. + /// + public List GetSections(Boolean withBrackets = true) + { + if(withBrackets) { + return this.inifile.Keys.ToList(); + } else { + List ret = new List(); + foreach (String item in this.inifile.Keys) { + ret.Add(item[1..^1]); + } + return ret; + } + } + + /// + /// Überschreibt eine InI-Datei mit der Kompletten neuen Configuration + /// + /// Neue Konfiguration + public void SetSections(Dictionary> config) { + this.inifile.Clear(); + foreach (KeyValuePair> item in config) { + String key = item.Key; + if(!key.StartsWith("[")) { + key = "[" + key + "]"; + } + if (Regex.Match(key, @"^\[[a-zA-ZäöüÄÖÜ0-9\-\._/ ]+\]\w*$", RegexOptions.IgnoreCase).Success) { + this.inifile.Add(key, item.Value); + } + } + this.Changed(); + } + public Dictionary GetSection(String section) => this.inifile.Keys.Contains(section) ? - this.inifile[section] : this.inifile.Keys.Contains("[" + section + "]") ? - this.inifile["[" + section + "]"] : new Dictionary(); - - /// - /// Gibt einen einzelnen Wert zurück - /// - /// Name der Sektion - /// Name des Wertes - /// - public String GetValue(String section, String key) - { - if (!section.StartsWith("[")) { - section = "[" + section + "]"; - } - return this.inifile.Keys.Contains(section) && this.inifile[section].Keys.Contains(key) ? this.inifile[section][key] : null; - } - - /// - /// Setzt einen Wert in einer Sektion - /// - /// Name der Sektion - /// Name des Wertes - /// Wert - public void SetValue(String section, String key, String value) - { - if (!section.StartsWith("[")) { - section = "[" + section + "]"; - } - if (this.inifile.Keys.Contains(section)) { - if (this.inifile[section].Keys.Contains(key)) { - this.inifile[section][key] = value; - } else { - this.inifile[section].Add(key, value); - } - } else { - Dictionary sub = new Dictionary { - { key, value } - }; - this.inifile.Add(section, sub); - } - this.Changed(); - } - - private void Changed() - { - this.k.Changed -= null; - this.SaveSettings(); - this.LoadFile(); - this.k.Changed += new FileSystemEventHandler(this.ReadAgain); - } - - private void SaveSettings() - { - StreamWriter file = new StreamWriter(this.filename); - file.BaseStream.SetLength(0); - file.BaseStream.Flush(); - _ = file.BaseStream.Seek(0, SeekOrigin.Begin); - foreach (KeyValuePair> cap in this.inifile) { - file.WriteLine(cap.Key); - foreach (KeyValuePair sub in cap.Value) { - file.WriteLine(sub.Key + "=" + sub.Value); - } - file.WriteLine(); - } - file.Flush(); - file.Close(); - } - - /// - /// Fügt eine neue Sektion in der Ini-Datei ein. - /// - /// Sektionsname - /// true if added, false if error - public Boolean AddSection(String name) - { - if (!name.StartsWith("[")) { - name = "[" + name + "]"; - } - if (this.inifile.Keys.Contains(name)) { - return false; - } - this.inifile.Add(name, new Dictionary()); - this.Changed(); - return true; - } - - /// - /// Löscht eine Sektion inklusive Unterpunkte aus der Ini-Datei. - /// - /// Sektionsname - /// true if removed, false if error - public Boolean RemoveSection(String name) - { - if (!name.StartsWith("[")) { - name = "[" + name + "]"; - } - if (!this.inifile.Keys.Contains(name)) { - return false; - } - _ = this.inifile.Remove(name); - this.Changed(); - return false; - } - - protected virtual void Dispose(Boolean disposing) { - if (disposing) { - this.k.Dispose(); - } - } - - public void Dispose() { - this.Dispose(true); - GC.SuppressFinalize(this); - } - } -} + this.inifile[section] : this.inifile.Keys.Contains("[" + section + "]") ? + this.inifile["[" + section + "]"] : new Dictionary(); + + /// + /// Gibt einen einzelnen Wert zurück + /// + /// Name der Sektion + /// Name des Wertes + /// + public String GetValue(String section, String key) + { + if (!section.StartsWith("[")) { + section = "[" + section + "]"; + } + return this.inifile.Keys.Contains(section) && this.inifile[section].Keys.Contains(key) ? this.inifile[section][key] : null; + } + + /// + /// Setzt einen Wert in einer Sektion + /// + /// Name der Sektion + /// Name des Wertes + /// Wert + public void SetValue(String section, String key, String value) + { + if (!section.StartsWith("[")) { + section = "[" + section + "]"; + } + if (this.inifile.Keys.Contains(section)) { + if (this.inifile[section].Keys.Contains(key)) { + this.inifile[section][key] = value; + } else { + this.inifile[section].Add(key, value); + } + } else { + Dictionary sub = new Dictionary { + { key, value } + }; + this.inifile.Add(section, sub); + } + this.Changed(); + } + + private void Changed() + { + this.k.Changed -= null; + this.SaveSettings(); + this.LoadFile(); + this.k.Changed += new FileSystemEventHandler(this.ReadAgain); + } + + private void SaveSettings() + { + StreamWriter file = new StreamWriter(this.filename); + file.BaseStream.SetLength(0); + file.BaseStream.Flush(); + _ = file.BaseStream.Seek(0, SeekOrigin.Begin); + foreach (KeyValuePair> cap in this.inifile) { + file.WriteLine(cap.Key); + foreach (KeyValuePair sub in cap.Value) { + file.WriteLine(sub.Key + "=" + sub.Value); + } + file.WriteLine(); + } + file.Flush(); + file.Close(); + } + + /// + /// Fügt eine neue Sektion in der Ini-Datei ein. + /// + /// Sektionsname + /// true if added, false if error + public Boolean AddSection(String name) + { + if (!name.StartsWith("[")) { + name = "[" + name + "]"; + } + if (this.inifile.Keys.Contains(name)) { + return false; + } + this.inifile.Add(name, new Dictionary()); + this.Changed(); + return true; + } + + /// + /// Löscht eine Sektion inklusive Unterpunkte aus der Ini-Datei. + /// + /// Sektionsname + /// true if removed, false if error + public Boolean RemoveSection(String name) + { + if (!name.StartsWith("[")) { + name = "[" + name + "]"; + } + if (!this.inifile.Keys.Contains(name)) { + return false; + } + _ = this.inifile.Remove(name); + this.Changed(); + return false; + } + + protected virtual void Dispose(Boolean disposing) { + if (disposing) { + this.k.Dispose(); + } + } + + public void Dispose() { + this.Dispose(true); + GC.SuppressFinalize(this); + } + } +} diff --git a/Utils/OwnModel.cs b/Utils/OwnModel.cs index 17277d4..5e50886 100644 --- a/Utils/OwnModel.cs +++ b/Utils/OwnModel.cs @@ -1,25 +1,25 @@ -using System; -using System.Collections.Generic; - -namespace BlubbFish.Utils { - public abstract class OwnModel where T : class - { - private static readonly Lazy _instance = new Lazy(() => CreateInstanceOfT()); - private readonly List observer = new List(); - public static T Instance => _instance.Value; - private static T CreateInstanceOfT() => Activator.CreateInstance(typeof(T), true) as T; - - public void SetObserver(OwnView view) - { - this.observer.Add(view); - view.Update(); - } - - public void RemoveObserver(OwnView view) => _ = this.observer.Remove(view); +using System; +using System.Collections.Generic; + +namespace BlubbFish.Utils { + public abstract class OwnModel where T : class + { + private static readonly Lazy _instance = new Lazy(() => CreateInstanceOfT()); + private readonly List observer = new List(); + public static T Instance => _instance.Value; + private static T CreateInstanceOfT() => Activator.CreateInstance(typeof(T), true) as T; + + public void SetObserver(OwnView view) + { + this.observer.Add(view); + view.Update(); + } + + public void RemoveObserver(OwnView view) => _ = this.observer.Remove(view); protected void Update() => this.observer.ForEach(delegate (OwnView view) { view.Update(); - }); - abstract protected void Init(); - abstract public void Dispose(); - } -} + }); + abstract protected void Init(); + abstract public void Dispose(); + } +} diff --git a/Utils/Properties/AssemblyInfo.cs b/Utils/Properties/AssemblyInfo.cs index c4e69c2..5ccf287 100644 --- a/Utils/Properties/AssemblyInfo.cs +++ b/Utils/Properties/AssemblyInfo.cs @@ -1,45 +1,45 @@ -#if !NETCOREAPP -using System.Reflection; +#if !NETCOREAPP +using System.Reflection; using System.Resources; using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die mit einer Assembly verknüpft sind. -[assembly: AssemblyTitle("Utils")] -[assembly: AssemblyDescription("Provides useful classes for other projects")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("BlubbFish")] -[assembly: AssemblyProduct("Utils")] -[assembly: AssemblyCopyright("Copyright © BlubbFish 2014 - 10.04.2021")] -[assembly: AssemblyTrademark("BlubbFish")] -[assembly: AssemblyCulture("")] -[assembly: NeutralResourcesLanguage("de-DE")] - - -// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar -// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von -// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. -[assembly: ComVisible(false)] - -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("6f20376a-5c71-4979-9932-13c105d1c6e6")] - -// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: -// -// Hauptversion -// Nebenversion -// Buildnummer -// Revision -// -// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern -// übernehmen, indem Sie "*" eingeben: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.5.0")] -[assembly: AssemblyFileVersion("1.5.0")] -#endif +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("Utils")] +[assembly: AssemblyDescription("Provides useful classes for other projects")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("BlubbFish")] +[assembly: AssemblyProduct("Utils")] +[assembly: AssemblyCopyright("Copyright © BlubbFish 2014 - 10.04.2021")] +[assembly: AssemblyTrademark("BlubbFish")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("de-DE")] -/** - * 1.5.0 Add GetEvent so you can call events by string; Add OwnSingeton class - * 1.4.0 Add Helper to Utils + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("6f20376a-5c71-4979-9932-13c105d1c6e6")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.5.0")] +[assembly: AssemblyFileVersion("1.5.0")] +#endif + +/** + * 1.5.0 Add GetEvent so you can call events by string; Add OwnSingeton class + * 1.4.0 Add Helper to Utils */ diff --git a/Utils/Utils.csproj b/Utils/Utils.csproj index 380dbd2..492396d 100644 --- a/Utils/Utils.csproj +++ b/Utils/Utils.csproj @@ -8,26 +8,45 @@ BlubbFish BlubbFish Utils.BlubbFish - Copyright © BlubbFish 2014 - 10.04.2021 - 1.5.0 - 1.5.0 + Copyright © BlubbFish 2014 - 09.01.2022 + 1.6.0 de-DE LICENSE http://git.blubbfish.net/vs_utils/Utils http://git.blubbfish.net/vs_utils/Utils.git git - 1.5.0 - 1.5.0 Add GetEvent so you can call events by string; Add OwnSingeton class - 1.4.0 Add Helper to Utils - + 1.6.0 HttpEndpoint added + 1.5.0 Add GetEvent so you can call events by string; Add OwnSingeton class + 1.4.0 Add Helper to Utils + 1.1.3 Improve CmdArgs + 1.1.2 Tiny Codingstyles + 1.1.1 ProgrammLogger neets to cleanup + 1.1.0 ProgrammLogger + 1.0.7.0 Yet another IniReader improvemnt round again + 1.0.6.0 Yet another IniReader improvemnt round + 1.0.5.2 And Improve IniReader again + 1.0.5.1 Improve IniReader again + 1.0.5.0 Improve IniReader + 1.0.4.1 Cleanup OwnView + 1.0.4.0 More Updater + 1.0.3.2 Next Updater + 1.0.3.1 EventArgsHelper + 1.0.2.6 Better Updater + 1.0.2.5 Logging in OwnObject + 1.0.2.3 OwnModel better + 1.0.2.2 Make it nice + 1.0.2.1 Filemutex + 1.0.0.1 Filelogger improvements + 1.0.0.0 Init + - - - + + +