Update 20260717

This commit is contained in:
Stefan Hutter
2026-07-17 14:43:33 +02:00
parent 58cd45116c
commit ebc8101626
1004 changed files with 1174234 additions and 84840 deletions
@@ -0,0 +1,54 @@
using NLog;
using NLog.LayoutRenderers;
using System.Configuration;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace GenDocCli
{
public class ApiClient
{
private static readonly Logger Logger =
LogManager.GetCurrentClassLogger();
private readonly string _url;
private readonly string _token;
public ApiClient()
{
_url = GenDocCLI.Properties.Settings.Default.API;
_token = GenDocCLI.Properties.Settings.Default.Token;
}
public async Task<bool> CallGenDoc(string json)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer",
_token);
var content = new StringContent(
json,
Encoding.UTF8,
"application/json");
HttpResponseMessage response =
await client.PostAsync(_url, content);
string responseText =
await response.Content.ReadAsStringAsync();
Logger.Debug(
"HTTP {0} Response: {1}",
(int)response.StatusCode,
responseText);
return response.IsSuccessStatusCode;
}
}
}
}
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="GenDocCLI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<userSettings>
<GenDocCLI.Properties.Settings>
<setting name="API" serializeAs="String">
<value>http://localhost:44303/API/DokumentGenerator</value>
</setting>
<setting name="Token" serializeAs="String">
<value>pZkuG6l6ORCEckqQimPK58PO1A9EnkMtL5oCgRX9WiWnD4xeH7ikGzhWnTBy/vk8J4Iiz8gCSx9uFHA4+DvITG0roO97sk82d/0BCjVlwLWINpXlJfGYEF3X96AdoCQvb3ruwv/tVqEHsSU5aNfyxBAe+EhLTHQ8t7ysgJZWh98=</value>
</setting>
</GenDocCLI.Properties.Settings>
</userSettings>
</configuration>
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/>
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
-->
<!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
</targets>
<rules>
<!-- add your logging rules here -->
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
</nlog>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,95 @@
using NLog;
using NLog.Config;
using NLog.Targets;
namespace GenDocCli
{
public static class NLogConfigurator
{
public static void Configure(
string logFile,
string logLevel)
{
var config = new LoggingConfiguration();
var fileTarget = new FileTarget("file")
{
FileName = logFile,
Layout =
"${longdate}|${level:uppercase=true}|${message}|${exception:format=tostring}"
};
config.AddTarget(fileTarget);
var consoleTarget = new ConsoleTarget("console")
{
Layout =
"${longdate}|${level:uppercase=true}|${message}|${exception:format=tostring}"
};
config.AddTarget(consoleTarget);
LogLevel level;
level = LogLevel.Info;
if (logLevel.ToUpper() == "ALL")
{
for (int i = 0; i < 5; i++)
{
if(i== 0)
{
level = LogLevel.Trace;
}
if (i==1)
{
level = LogLevel.Debug;
}
else if (i == 2)
{
level = LogLevel.Info;
}
else if (i == 3)
{
level = LogLevel.Warn;
}
else if (i == 4)
{
level = LogLevel.Error;
}
config.LoggingRules.Add(new LoggingRule("*", level, fileTarget));
config.LoggingRules.Add(new LoggingRule("*", level, consoleTarget));
}
LogManager.Configuration = config;
return;
}
switch (logLevel.ToUpper())
{
case "DEBUG":
level = LogLevel.Debug;
break;
case "WARN":
level = LogLevel.Warn;
break;
case "ERROR":
level = LogLevel.Error;
break;
default:
level = LogLevel.Info;
break;
}
config.LoggingRules.Add( new LoggingRule( "*", level, fileTarget));
config.LoggingRules.Add( new LoggingRule("*", level, consoleTarget));
LogManager.Configuration = config;
}
}
}
@@ -0,0 +1,163 @@
using NLog;
using System;
using System.IO;
using System.Net;
using System.Threading;
namespace GenDocCli
{
internal class Program
{
private static readonly Logger Logger =
LogManager.GetCurrentClassLogger();
static int Main(string[] args)
{
try
{
if (args.Length != 8)
{
Console.WriteLine(
"GenDocCli.exe <Verzeichnis> <Logfile> <OKLogFile> <ErrorLogFile> <LogLevel> <Tranchengrösse> <Anzahl ohne Pause> <Pause in Sekunden>");
return 1;
}
string directory = args[0];
string logFile = args[1];
string okLogFile = args[2];
string errorLogFile = args[3];
string logLevel = args[4];
int tranchengroesse = int.Parse(args[5]);
int batchSize = int.Parse(args[6]);
int pauseSeconds = int.Parse(args[7]);
NLogConfigurator.Configure(logFile, logLevel);
Logger.Info("Programmstart");
if (!Directory.Exists(directory))
{
Logger.Error("Verzeichnis existiert nicht: {0}", directory);
return 2;
}
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var apiClient = new ApiClient();
string[] files = Directory.GetFiles(directory, "*.json");
Logger.Info("{0} JSON-Dateien gefunden", files.Length);
int totalProcessed = 0;
int batchCounter = 0;
foreach (string file in files)
{
ProcessFile(
file,
apiClient,
okLogFile,
errorLogFile);
totalProcessed++;
batchCounter++;
if (batchCounter >= batchSize)
{
Logger.Info(
"{0} Dateien verarbeitet. Batchgröße {1} erreicht. Pause {2}s.",
totalProcessed,
batchSize,
pauseSeconds);
Thread.Sleep(TimeSpan.FromSeconds(pauseSeconds));
batchCounter = 0;
}
if (totalProcessed > tranchengroesse -1)
{
break;
}
}
Logger.Info("Total verarbeitet: {0} Dateien", totalProcessed);
Logger.Info("Programmende");
LogManager.Shutdown();
return 0;
}
catch (Exception ex)
{
Logger.Fatal(ex, "Unerwarteter Fehler");
Logger.Error(ex, "Unerwarteter Fehler");
return 99;
}
}
private static void ProcessFile(
string file,
ApiClient apiClient,
string okLogFile,
string errorLogFile)
{
try
{
Logger.Info("Verarbeite Datei {0}", file);
string json = File.ReadAllText(file);
bool success =
apiClient.CallGenDoc(json).GetAwaiter().GetResult();
if (success)
{
File.AppendAllText(
okLogFile,
$"{DateTime.Now:yyyy-MM-dd HH:mm:ss};{Path.GetFileName(file)}{Environment.NewLine}");
RenameFile(file, ".OK");
Logger.Info(
"Datei erfolgreich verarbeitet: {0}",
Path.GetFileName(file));
}
else
{
File.AppendAllText(
errorLogFile,
$"{DateTime.Now:yyyy-MM-dd HH:mm:ss};{Path.GetFileName(file)}{Environment.NewLine}");
RenameFile(file, ".err");
Logger.Warn(
"API meldet Fehler für Datei: {0}",
Path.GetFileName(file));
}
}
catch (Exception ex)
{
File.AppendAllText(
errorLogFile,
$"{DateTime.Now:yyyy-MM-dd HH:mm:ss};{Path.GetFileName(file)};{ex.Message}{Environment.NewLine}");
RenameFile(file, ".err");
Logger.Error(ex,
"Fehler bei Verarbeitung von {0}",
Path.GetFileName(file));
}
}
private static void RenameFile(string fileName, string suffix)
{
string targetFile = fileName + suffix;
if (File.Exists(targetFile))
{
File.Delete(targetFile);
}
File.Move(fileName, targetFile);
}
}
}
@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
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 einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("Tool_API_DokumentGenerator_RunCLI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HP Inc.")]
[assembly: AssemblyProduct("Tool_API_DokumentGenerator_RunCLI")]
[assembly: AssemblyCopyright("Copyright © HP Inc. 2026")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("5f503f2c-5ca8-4aeb-9133-4ba3babf62b2")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,52 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace GenDocCLI.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("http://localhost:44303/API/DokumentGenerator")]
public string API {
get {
return ((string)(this["API"]));
}
set {
this["API"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("pZkuG6l6ORCEckqQimPK58PO1A9EnkMtL5oCgRX9WiWnD4xeH7ikGzhWnTBy/vk8J4Iiz8gCSx9uFHA4+" +
"DvITG0roO97sk82d/0BCjVlwLWINpXlJfGYEF3X96AdoCQvb3ruwv/tVqEHsSU5aNfyxBAe+EhLTHQ8t" +
"7ysgJZWh98=")]
public string Token {
get {
return ((string)(this["Token"]));
}
set {
this["Token"] = value;
}
}
}
}
@@ -0,0 +1,12 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="GenDocCLI.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="API" Type="System.String" Scope="User">
<Value Profile="(Default)">http://localhost:44303/API/DokumentGenerator</Value>
</Setting>
<Setting Name="Token" Type="System.String" Scope="User">
<Value Profile="(Default)">pZkuG6l6ORCEckqQimPK58PO1A9EnkMtL5oCgRX9WiWnD4xeH7ikGzhWnTBy/vk8J4Iiz8gCSx9uFHA4+DvITG0roO97sk82d/0BCjVlwLWINpXlJfGYEF3X96AdoCQvb3ruwv/tVqEHsSU5aNfyxBAe+EhLTHQ8t7ysgJZWh98=</Value>
</Setting>
</Settings>
</SettingsFile>
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5F503F2C-5CA8-4AEB-9133-4BA3BABF62B2}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>GenDocCLI</RootNamespace>
<AssemblyName>GenDocCLI</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="NLog, Version=6.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.6.1.3\lib\net46\NLog.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ApiClient.cs" />
<Compile Include="NLogConfigurator.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<Content Include="NLog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="NLog.xsd">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<StartArguments>E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output\log.log E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output\ok.log E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output\nok.log all 2 5 10</StartArguments>
</PropertyGroup>
</Project>
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="GenDocCLI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<userSettings>
<GenDocCLI.Properties.Settings>
<setting name="API" serializeAs="String">
<value>http://localhost:2032/API/DokumentGenerator</value>
</setting>
<setting name="Token" serializeAs="String">
<value>pZkuG6l6ORCEckqQimPK58PO1A9EnkMtL5oCgRX9WiWnD4xeH7ikGzhWnTBy/vk8J4Iiz8gCSx9uFHA4+DvITG0roO97sk82d/0BCjVlwLWINpXlJfGYEF3X96AdoCQvb3ruwv/tVqEHsSU5aNfyxBAe+EhLTHQ8t7ysgJZWh98=</value>
</setting>
</GenDocCLI.Properties.Settings>
</userSettings>
</configuration>
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/>
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
-->
<!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
</targets>
<rules>
<!-- add your logging rules here -->
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
</nlog>
Binary file not shown.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,2 @@
GenDocCLI E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output\log.log E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output\ok.log E:\Software-Projekte\OnDoc\Vorlagen\BatchAPI\output\nok.log all 2 50 10
pause
@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
@@ -0,0 +1 @@
825cbcc390f9ab5d4dd2220d78678c22e406f4f2c9b59982d92ad76fd2671a58
@@ -0,0 +1,11 @@
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\bin\Debug\NLog.config
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\bin\Debug\NLog.dll
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\bin\Debug\NLog.xml
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\obj\Debug\Tool_API_DokumentGenerator_RunCLI.csproj.AssemblyReference.cache
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\obj\Debug\Tool_API_DokumentGenerator_RunCLI.csproj.CoreCompileInputs.cache
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\obj\Debug\Tool_API.8564EB25.Up2Date
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\bin\Debug\GenDocCLI.exe.config
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\bin\Debug\GenDocCLI.exe
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\bin\Debug\GenDocCLI.pdb
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\obj\Debug\GenDocCLI.exe
E:\Software-Projekte\OnDoc\OnDoc\Tool_API_DokumentGenerator_RunCLI\obj\Debug\GenDocCLI.pdb
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NLog" version="6.1.3" targetFramework="net48" />
<package id="NLog.Config" version="4.7.15" targetFramework="net48" />
<package id="NLog.Schema" version="4.7.15" targetFramework="net48" />
</packages>