Commit 5df5f3e5ea87f4beed8059c3147bde785bf1f607

Authored by Schwirg László
1 parent 5968301d

v1.14.0.0

akciók hívása a web serveren első változatának beépítése
Vrh.Log4Pro.MaintenanceConsole/App.config
... ... @@ -24,6 +24,14 @@
24 24 <assemblyIdentity name="System.Security.Principal.Windows" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
25 25 <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
26 26 </dependentAssembly>
  27 + <dependentAssembly>
  28 + <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
  29 + <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
  30 + </dependentAssembly>
  31 + <dependentAssembly>
  32 + <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  33 + <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
  34 + </dependentAssembly>
27 35 </assemblyBinding>
28 36 </runtime>
29 37 <system.web>
... ...
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - CommandLineParser.cs
... ... @@ -218,6 +218,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.CommandLineParserNS
218 218 public static class SiteStop { public const string KEY = "WSF"; }
219 219 public static class PoolSetUserAccount { public const string KEY = "APU"; }
220 220 public static class Restart { public const string KEY = "R"; }
  221 + public static class SendUrl { public const string KEY = "URL"; }
221 222 }
222 223 }
223 224 public static class WindowsServiceManager
... ...
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools - Http.cs 0 → 100644
... ... @@ -0,0 +1,82 @@
  1 +using System;
  2 +using System.IO;
  3 +using System.IO.Compression;
  4 +using System.Collections.Generic;
  5 +using System.Linq;
  6 +using System.Security.Principal;
  7 +using System.Text;
  8 +using System.Text.RegularExpressions;
  9 +using System.Threading.Tasks;
  10 +using System.Threading;
  11 +
  12 +using Microsoft.Web.Administration;
  13 +using System.Management;
  14 +using System.Diagnostics;
  15 +
  16 +using Vrh.XmlProcessing;
  17 +using System.Xml.Linq;
  18 +using Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS;
  19 +using VRH.Common;
  20 +using Microsoft.Win32;
  21 +using System.Reflection;
  22 +using Vrh.Log4Pro.MaintenanceConsole.CommandLineParserNS;
  23 +using System.Net.Http;
  24 +using System.Net.Http.Headers;
  25 +using System.Collections.Generic;
  26 +using System.Text.Json;
  27 +using System.Text.Json.Serialization;
  28 +
  29 +
  30 +namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
  31 +{
  32 + public static class HttpTools
  33 + {
  34 + public enum RequestType { GET,POST,}
  35 + public static ReturnInfoJSON GetReturninfoJSON(string url, RequestType mode = RequestType.GET)
  36 + {
  37 + string returninfojsonstring = "";
  38 + try
  39 + {
  40 + return mode == RequestType.GET? _GetReturninfoJSON(url,out returninfojsonstring) : _PostReturninfoJSON(url, out returninfojsonstring);
  41 + }
  42 + catch (Exception ex) { return new ReturnInfoJSON() { ReturnValue = -1, ReturnMessage = ex.Message + "\n" + returninfojsonstring, }; }
  43 + }
  44 +
  45 + private static ReturnInfoJSON _GetReturninfoJSON(string url, out string returninfojsonstring)
  46 + {
  47 + var returninfojsonstream = Task.Run(async () => await (new HttpClient()).GetStreamAsync(url)).GetAwaiter().GetResult();
  48 + returninfojsonstring = GetStreamAsString(returninfojsonstream);
  49 + ReturnInfoJSON returninfojson = JsonSerializer.Deserialize<ReturnInfoJSON>(returninfojsonstring);
  50 + //ReturnInfoJSON returninfojson = Task.Run(async () => await JsonSerializer.DeserializeAsync<ReturnInfoJSON>(returninfojsonstream)).GetAwaiter().GetResult();
  51 + return returninfojson;
  52 + }
  53 + private static ReturnInfoJSON _PostReturninfoJSON(string url, out string returninfojsonstring)
  54 + {
  55 + var returninfojsonhttpresponsemessage = Task.Run(async () => await (new HttpClient()).PostAsync(url, null)).GetAwaiter().GetResult();
  56 + var returninfojsonstream = Task.Run(async () => await returninfojsonhttpresponsemessage.Content.ReadAsStreamAsync()).GetAwaiter().GetResult();
  57 + returninfojsonstring = GetStreamAsString(returninfojsonstream);
  58 + ReturnInfoJSON returninfojson = JsonSerializer.Deserialize<ReturnInfoJSON>(returninfojsonstring);
  59 + //var returninfojson = Task.Run(async () => await JsonSerializer.DeserializeAsync<ReturnInfoJSON>(returninfojsonstream)).GetAwaiter().GetResult();
  60 + return returninfojson;
  61 + }
  62 + private static string GetStreamAsString(Stream stream)
  63 + {
  64 +
  65 + StreamReader reader = new StreamReader(stream);
  66 + return reader.ReadToEnd();
  67 +
  68 + byte[] bytes = new byte[stream.Length];
  69 + stream.Position = 0;
  70 + stream.Read(bytes, 0, (int)stream.Length);
  71 + return Encoding.ASCII.GetString(bytes); // this is your string
  72 + }
  73 + public class ReturnInfoJSON
  74 + {
  75 + [JsonPropertyName("ReturnValue")]
  76 + public int ReturnValue { get; set; }
  77 +
  78 + [JsonPropertyName("ReturnMessage")]
  79 + public string ReturnMessage { get; set; }
  80 + }
  81 + }
  82 +}
0 83 \ No newline at end of file
... ...
Vrh.Log4Pro.MaintenanceConsole/Manager - WebApplicationManager.cs
... ... @@ -53,6 +53,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WebApplicationManagerNS
53 53 .AddMenuItem(new Menu.Item(CLP.Module.WebApplicationManager.Function.SiteStop.KEY, "Stop website",SiteStop, ep))
54 54 .AddMenuItem(new Menu.Item(CLP.Module.WebApplicationManager.Function.PoolSetUserAccount.KEY, "Set pool user account",PoolSetUserAccount, ep))
55 55 .AddMenuItem(new Menu.Item(CLP.Module.WebApplicationManager.Function.Restart.KEY, "Restart website and pool",Restart, ep))
  56 + .AddMenuItem(new Menu.Item(CLP.Module.WebApplicationManager.Function.SendUrl.KEY, "Send url and display ReturnInfoJSON result", SendUrl, ep))
56 57 .SetSelectionMode(Menu.SelectionMode.Single)
57 58 .SetMenuHeaderDisplayer(WebApplicationListDisplayer);
58 59  
... ... @@ -82,6 +83,33 @@ namespace Vrh.Log4Pro.MaintenanceConsole.WebApplicationManagerNS
82 83 #endregion private DisplayWebApplicationMenu
83 84  
84 85 #region 1st level Executors
  86 + private static object SendUrl(object parameters, object o)
  87 + {
  88 + var config = (parameters as Menu.ExecutorParameter).GetConfig<WebApplicationManagerXmlProcessor>();
  89 + var args = (parameters as Menu.ExecutorParameter).Args;
  90 + var selectedwaindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.WebApplicationManager.Function.CMD_WEBAPPS);
  91 +
  92 + const string TESTURL = "http://localhost/Log4ProIS/Import/Log/PurgeGet?numofdays=120&xml=config=ALM_Import;";
  93 +
  94 + ColorConsole.WriteLine("Enter url to send:", ConsoleColor.Yellow);
  95 + ColorConsole.WriteLine("Sample (Enter 'Sample' to use this):", ConsoleColor.Gray, suffix: TESTURL);
  96 + string url = ColorConsole.ReadLine();
  97 + if (url.ToLower() == "ex") return o;
  98 + if (url.ToLower() == "sample") url = TESTURL;
  99 + ColorConsole.WriteLine("Enter request type (GET/POST):", ConsoleColor.Yellow);
  100 + string gpstr = ColorConsole.ReadLine();
  101 + HttpTools.RequestType gp = HttpTools.RequestType.GET;
  102 + if (gpstr.ToLower() == "ex") return o;
  103 + else if (gpstr.ToUpper() == nameof(HttpTools.RequestType.GET)) { gp = HttpTools.RequestType.GET; }
  104 + else if (gpstr.ToUpper() == nameof(HttpTools.RequestType.POST)) { gp = HttpTools.RequestType.POST; }
  105 +
  106 + ToolsNS.HttpTools.ReturnInfoJSON returninfojson = HttpTools.GetReturninfoJSON(url,gp);
  107 + ColorConsole.WriteLine("ReturnValue:",ConsoleColor.Yellow,suffix: returninfojson.ReturnValue.ToString());
  108 + ColorConsole.WriteLine("ReturnMessage:", ConsoleColor.Yellow, suffix: returninfojson.ReturnMessage);
  109 + ColorConsole.WriteLine();
  110 +
  111 + return o;
  112 + }
85 113 private static object Restart(object parameters, object o)
86 114 {
87 115 var config = (parameters as Menu.ExecutorParameter).GetConfig<WebApplicationManagerXmlProcessor>();
... ...
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
... ... @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 32 // You can specify all the values or you can default the Build and Revision Numbers
33 33 // by using the '*' as shown below:
34 34 // [assembly: AssemblyVersion("1.0.*")]
35   -[assembly: AssemblyVersion("1.13.0.0")]
36   -[assembly: AssemblyFileVersion("1.13.0.0")]
  35 +[assembly: AssemblyVersion("1.14.0.0")]
  36 +[assembly: AssemblyFileVersion("1.14.0.0")]
... ...
Vrh.Log4Pro.MaintenanceConsole/Vrh.Log4Pro.MaintenanceConsole.csproj
... ... @@ -250,6 +250,7 @@
250 250 <Private>True</Private>
251 251 </Reference>
252 252 <Reference Include="System.Management" />
  253 + <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
253 254 <Reference Include="System.Messaging" />
254 255 <Reference Include="System.Net.Http, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
255 256 <HintPath>..\packages\System.Net.Http.4.1.0\lib\net46\System.Net.Http.dll</HintPath>
... ... @@ -275,6 +276,9 @@
275 276 <Private>True</Private>
276 277 <Private>True</Private>
277 278 </Reference>
  279 + <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  280 + <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
  281 + </Reference>
278 282 <Reference Include="System.Runtime.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
279 283 <HintPath>..\packages\System.Runtime.Extensions.4.1.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
280 284 <Private>True</Private>
... ... @@ -322,11 +326,15 @@
322 326 <Reference Include="System.ServiceProcess.ServiceController, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
323 327 <HintPath>..\packages\System.ServiceProcess.ServiceController.4.1.0\lib\net461\System.ServiceProcess.ServiceController.dll</HintPath>
324 328 </Reference>
  329 + <Reference Include="System.Text.Json, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" />
325 330 <Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
326 331 <HintPath>..\packages\System.Text.RegularExpressions.4.1.0\lib\net463\System.Text.RegularExpressions.dll</HintPath>
327 332 <Private>True</Private>
328 333 <Private>True</Private>
329 334 </Reference>
  335 + <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
  336 + <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
  337 + </Reference>
330 338 <Reference Include="System.Web" />
331 339 <Reference Include="System.Web.ApplicationServices" />
332 340 <Reference Include="System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
... ... @@ -339,18 +347,19 @@
339 347 <Reference Include="Microsoft.CSharp" />
340 348 <Reference Include="System.Data" />
341 349 <Reference Include="System.Xml" />
342   - <Reference Include="VRH.Common, Version=2.21.3.0, Culture=neutral, processorArchitecture=MSIL">
343   - <HintPath>..\packages\VRH.Common.2.21.3\lib\net45\VRH.Common.dll</HintPath>
  350 + <Reference Include="VRH.Common, Version=2.23.1.0, Culture=neutral, processorArchitecture=MSIL">
  351 + <HintPath>..\packages\VRH.Common.2.23.1\lib\net45\VRH.Common.dll</HintPath>
344 352 </Reference>
345 353 <Reference Include="Vrh.Web.Providers, Version=2.0.2.0, Culture=neutral, processorArchitecture=MSIL">
346 354 <HintPath>..\packages\VRH.Web.Providers.2.0.2\lib\net452\Vrh.Web.Providers.dll</HintPath>
347 355 </Reference>
348   - <Reference Include="Vrh.XmlProcessing, Version=1.27.1.0, Culture=neutral, processorArchitecture=MSIL">
349   - <HintPath>..\packages\Vrh.XmlProcessing.1.27.1\lib\net45\Vrh.XmlProcessing.dll</HintPath>
  356 + <Reference Include="Vrh.XmlProcessing, Version=1.30.0.0, Culture=neutral, processorArchitecture=MSIL">
  357 + <HintPath>..\packages\Vrh.XmlProcessing.1.30.0\lib\net45\Vrh.XmlProcessing.dll</HintPath>
350 358 </Reference>
351 359 <Reference Include="WindowsBase" />
352 360 </ItemGroup>
353 361 <ItemGroup>
  362 + <Compile Include="ConsoleFunction - Tools - Http.cs" />
354 363 <Compile Include="ConsoleFunction - Tools - TcpIp.cs" />
355 364 <Compile Include="ConsoleFunction - CommandLineParser.cs" />
356 365 <Compile Include="ConsoleFunction - ColorConsole.cs" />
... ...
Vrh.Log4Pro.MaintenanceConsole/Vrh.NugetModuls.Documentations/Vrh.XmlProcessing/ReadMe.md
... ... @@ -773,6 +773,78 @@ Ha hibaérzékenység nem, de például logolás szükséges, akkor ezt a Config
773 773  
774 774 ***
775 775 ## Version History:
  776 +### 1.29.0 (2021.08.29) Compatible changes
  777 +- ResponseTargets enum áthelyezése a Vrh.Web.Menu projektből ide.
  778 +
  779 +### 1.28.1 Patch (2021.07.02), nuget
  780 +
  781 +### 1.28.0 Compatible change (2021.07.01), nuget
  782 +- SetThrowException és SetEnable FileWatcher metódudsok publikussá tétele, hogy azokkal a konstruktorokkal
  783 +is lehessen használni ezeket a funkciókat, amelyekben nincs ilyen paraméter
  784 +
  785 +### 1.27.1 Patch (2021.05.02), nuget
  786 +- LinqXMLProcessorBaseCommonOrInstance: ha az instance xml nem létezett, akkor exception-t dobott; javítva lett, hogy ilyenkor a common xml-t használja
  787 +
  788 +### 1.27.0 Compatible change (2021.04.27)
  789 +- xml connection stringben a changesensitive,generatexmlerrorevent és throwexception elemek bevezetése
  790 +- ezeket csak a LinqXMLProcessorBase alapú feldolgozás használja a korábban is meglévő, azonos nevű paraméterekkel szabályozott funkcióiban
  791 +- mindegyik alapértelmezése false
  792 +- switch típusú elemek, tehát nem kell név=érték formát ölteniük, elég csak a nevet szerepeltetni, amely egyenértékű a név=true; formával
  793 +- továbbra is megmaradt, hogy ezeket az értékeket az appsettings blokkban is meg lehet adni, az ott megadott érték és a connection string-ben megadott értékek vagy kapcsolatban vannak
  794 +- az XmlParser root file Configuration xml elemében bevezetésre került a Switches attributum, amelyben a fenti értékeket pontosvesszővel elválasztva meg lehet adni.
  795 +- ha egy érték az xml connectionstring-ben is szerepel, meg az általa hivatkozott konfigurációs elemben is, akkor a connectionstring-ben megadott érték lesz érvényben
  796 +
  797 +### 1.26.1 Patch (2021.02.03)
  798 +- UrlElement/IsRelative property setter public-ra állítva
  799 +
  800 +### 1.26.0 Compatible change (2021.01.27)
  801 +- Bevezetésre került az url leíróban az IsRelativ field és a UrlRoot field, valamint a GetUrlAbsolute metódus csoport.
  802 +Az IsRelativ true, ha az xml elemek egy relatív url-t eredményeznek; A GetUrlAbsolut metódusokban meg lehet adni egy urlroot
  803 +string paramétert, amely a rooturl-t tartalmazza és hozzáfűzésre kerl a relatív url elé. Ha az url abszolut, akkor nem
  804 +fűzi hozzá; Ha a rooturl paraméter üres, akkor a UrlRoot mező tartalmát fűzi a relatív url elé.
  805 +
  806 +### 1.25.1 Patch (2021.01.27)
  807 +
  808 +### 1.25.0 Compatible change (2021.01.27)
  809 +- Bevezetésre került az url leíróban az url xml elem. Ha ez megadásra kerül, akkor a GetUrl metódusok a protocol,
  810 +hostname,appname,area,controller és action xml elemeket nem használják, bár az UrlElement típusba az ott megadott
  811 +értékek is bekerülnek. Az url xml elem tartalmazhat input paraméter elemeket is, de ebben azt esetben az url xml
  812 +elem értékét az (és/ampersand) karakterrel kell zárni, ami jelzi, hogy a megadott inputparameter xml elemek
  813 +kiegészítő paramétereket tartalmaznak; ha az url xml elem értékét nem az (és/ampersand) karakter zárja,
  814 +akkor a megadott inputparameter xml elemek a ?(kérdőjel) karakterrel felvezetve kerülnek az url elemhez hozzáfűzésre!
  815 +
  816 +### 1.24.0 Compatible change (2021.01.05, nuget):
  817 +- Több Configurations elem is lehet az XmlParser root file-ban, ezek tartalmát összefűzi egy listába a feldolgozás előtt
  818 +
  819 +### 1.23.0 Compatible change (2020.12.08, nuget):
  820 +- A LinqXMLProcessorBase-hez a nyelvkód megadását biztosító konstruktorok hozzáadása
  821 +
  822 +### 1.22.0 Compatible change (2020.12.08, nuget):
  823 +- A GetValue függvény most már képes enum értékek közvetlen visszaadására
  824 +
  825 +### 1.21.0 Compatible change (2020.11.30, nuget):
  826 +- @THISFILE@ rendszerváltozó hozzáadása, amelyet az xmlparser az aktuális file teljes elérési útjára cserél le
  827 +
  828 +### 1.20.0 Compatible change (2020.11.25, nuget):
  829 +- Az xml parser element connection string nem csak egy xml elem felsorolást, hanem egy szabályos XPath kifejezést tartalmazhat.
  830 +- Az eddigi xml elem felsorolás a leggyakrabban alkalmazott / szeparátor karakterrel egy xpath kifejezés is egyben, így a kompatibilitás ezekkel megmarad.
  831 +- A fejlesztés feleslegessé teszi az xmlparser connectionstring-ben az id elemet, hisz a funkció xpath kifejezéssel leírható, ennek ellenére az id is megmaradt,
  832 +és használható. Példa: "file=x.xml;element=A/B/C;id=id1;" helyettesíthető ezzel: "file=x.xml;element=A/B/C[@id='id1'];"
  833 +
  834 +### 1.19.1 Patch:
  835 +- hiba javítása, ami miatt a /-lel kezdődő element-ek esetén hibás működést eredményezett
  836 +
  837 +### 1.19.0 Compatible changes:
  838 +- a kapcsolatleírók Merge-elésében levő logikai hiba kijavítása
  839 +- a Configuration elemben nem lehet Id és Preset attributum
  840 +- ha a connectionstring-ben a config és az element együtt szerepelnek, akkor az element-ben megadott XPath a config definícióban levő element-hez képest relatív
  841 +- ha egy XmlConnection-t mergelek egy second connection string-gel, akkor a second-ban levő element első karakterétől függően lecseréli az XmlConnection-ben levő
  842 +element értéket (első karakter = "/" esetén), vagy hozzáfűzi ahhoz; a fentiek alapján a configban megadott file és element értékek által meghatározott xml elemből
  843 +a connectionstring-ben megadott kiegészítő adatokkal nem lehet kijönni!
  844 +
  845 +### 1.18.5 Patch:
  846 +- csomagok frissítése
  847 +
776 848 ### 1.18.4 (2020.10.26) Patch:
777 849 - Az XmlConnection példányt nem írhatjuk felül büntetlenül, hiszen bizonyos alkalmazások meg pont arra számítanak, hogy ott az általuk ismert érték marad benne.
778 850 Az XmlParser.Configuration protected tulajdonság pont arra való, hogy az XmlParser származtatott osztályaiban a feloldott értékeket el lehessen érni.
... ...
Vrh.Log4Pro.MaintenanceConsole/packages.config
... ... @@ -51,6 +51,7 @@
51 51 <package id="System.Reflection.TypeExtensions" version="4.4.0" targetFramework="net472" />
52 52 <package id="System.Resources.ResourceManager" version="4.0.1" targetFramework="net472" />
53 53 <package id="System.Runtime" version="4.1.0" targetFramework="net472" />
  54 + <package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
54 55 <package id="System.Runtime.Extensions" version="4.1.0" targetFramework="net472" />
55 56 <package id="System.Runtime.Handles" version="4.0.1" targetFramework="net472" />
56 57 <package id="System.Runtime.InteropServices" version="4.1.0" targetFramework="net472" />
... ... @@ -68,10 +69,11 @@
68 69 <package id="System.Text.RegularExpressions" version="4.1.0" targetFramework="net472" />
69 70 <package id="System.Threading" version="4.0.11" targetFramework="net472" />
70 71 <package id="System.Threading.Tasks" version="4.0.11" targetFramework="net472" />
  72 + <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
71 73 <package id="System.Threading.Timer" version="4.0.1" targetFramework="net472" />
72 74 <package id="System.Xml.ReaderWriter" version="4.0.11" targetFramework="net472" />
73 75 <package id="System.Xml.XDocument" version="4.0.11" targetFramework="net472" />
74   - <package id="VRH.Common" version="2.21.3" targetFramework="net472" />
  76 + <package id="VRH.Common" version="2.23.1" targetFramework="net472" />
75 77 <package id="VRH.Web.Providers" version="2.0.2" targetFramework="net472" />
76   - <package id="Vrh.XmlProcessing" version="1.27.1" targetFramework="net472" />
  78 + <package id="Vrh.XmlProcessing" version="1.30.0" targetFramework="net472" />
77 79 </packages>
78 80 \ No newline at end of file
... ...