From 14d581acac1969f51df095a380ec03ab5b4f80ed Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 27 Aug 2026 10:36:55 +0200 Subject: [PATCH] Add EnvelopeGenerator.Service as a .NET Worker Service Introduced a new project `EnvelopeGenerator.Service` to the solution as a .NET Worker Service targeting the `net4.6.2` framework. - Configured the project with nullable reference types, implicit usings, and `LangVersion` set to `latest`. - Added a `Worker` class that logs periodic messages while running. - Updated `Program.cs` to configure and run the Worker Service. - Added `launchSettings.json` for development environment configuration. - Added `appsettings.json` and `appsettings.Development.json` for logging configuration. - Included the project in `EnvelopeGenerator.sln` with appropriate build configurations and hierarchy updates. --- .../EnvelopeGenerator.Service.csproj | 14 +++++++++++ EnvelopeGenerator.Service/Program.cs | 7 ++++++ .../Properties/launchSettings.json | 12 ++++++++++ EnvelopeGenerator.Service/Worker.cs | 24 +++++++++++++++++++ .../appsettings.Development.json | 8 +++++++ EnvelopeGenerator.Service/appsettings.json | 8 +++++++ EnvelopeGenerator.sln | 7 ++++++ 7 files changed, 80 insertions(+) create mode 100644 EnvelopeGenerator.Service/EnvelopeGenerator.Service.csproj create mode 100644 EnvelopeGenerator.Service/Program.cs create mode 100644 EnvelopeGenerator.Service/Properties/launchSettings.json create mode 100644 EnvelopeGenerator.Service/Worker.cs create mode 100644 EnvelopeGenerator.Service/appsettings.Development.json create mode 100644 EnvelopeGenerator.Service/appsettings.json diff --git a/EnvelopeGenerator.Service/EnvelopeGenerator.Service.csproj b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.csproj new file mode 100644 index 00000000..b0b45081 --- /dev/null +++ b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.csproj @@ -0,0 +1,14 @@ + + + + net4.6.2 + enable + enable + dotnet-EnvelopeGenerator.Service-816256a4-c636-4313-92c0-b62b04040c2b + latest + + + + + + diff --git a/EnvelopeGenerator.Service/Program.cs b/EnvelopeGenerator.Service/Program.cs new file mode 100644 index 00000000..a08adc48 --- /dev/null +++ b/EnvelopeGenerator.Service/Program.cs @@ -0,0 +1,7 @@ +using EnvelopeGenerator.Service; + +var builder = Host.CreateApplicationBuilder(args); +builder.Services.AddHostedService(); + +var host = builder.Build(); +host.Run(); diff --git a/EnvelopeGenerator.Service/Properties/launchSettings.json b/EnvelopeGenerator.Service/Properties/launchSettings.json new file mode 100644 index 00000000..bf4e37e2 --- /dev/null +++ b/EnvelopeGenerator.Service/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "EnvelopeGenerator.Service": { + "commandName": "Project", + "dotnetRunMessages": true, + "environmentVariables": { + "DOTNET_ENVIRONMENT": "Development" + } + } + } +} diff --git a/EnvelopeGenerator.Service/Worker.cs b/EnvelopeGenerator.Service/Worker.cs new file mode 100644 index 00000000..bf0a660b --- /dev/null +++ b/EnvelopeGenerator.Service/Worker.cs @@ -0,0 +1,24 @@ +namespace EnvelopeGenerator.Service +{ + public class Worker : BackgroundService + { + private readonly ILogger _logger; + + public Worker(ILogger logger) + { + _logger = logger; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + while (!stoppingToken.IsCancellationRequested) + { + if (_logger.IsEnabled(LogLevel.Information)) + { + _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + } + await Task.Delay(1000, stoppingToken); + } + } + } +} diff --git a/EnvelopeGenerator.Service/appsettings.Development.json b/EnvelopeGenerator.Service/appsettings.Development.json new file mode 100644 index 00000000..b2dcdb67 --- /dev/null +++ b/EnvelopeGenerator.Service/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/EnvelopeGenerator.Service/appsettings.json b/EnvelopeGenerator.Service/appsettings.json new file mode 100644 index 00000000..b2dcdb67 --- /dev/null +++ b/EnvelopeGenerator.Service/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/EnvelopeGenerator.sln b/EnvelopeGenerator.sln index 3aa53218..c9e6421d 100644 --- a/EnvelopeGenerator.sln +++ b/EnvelopeGenerator.sln @@ -55,6 +55,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnvelopeGenerator.Server.Cl EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EnvelopeGenerator.Service_legacy", "EnvelopeGenerator.Service_legacy\EnvelopeGenerator.Service_legacy.vbproj", "{83ED2617-B398-4859-8F59-B38F8807E83E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnvelopeGenerator.Service", "EnvelopeGenerator.Service\EnvelopeGenerator.Service.csproj", "{6B87FB5F-F4EA-45BE-A218-385DC2CE8E80}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -121,6 +123,10 @@ Global {83ED2617-B398-4859-8F59-B38F8807E83E}.Debug|Any CPU.Build.0 = Debug|Any CPU {83ED2617-B398-4859-8F59-B38F8807E83E}.Release|Any CPU.ActiveCfg = Release|Any CPU {83ED2617-B398-4859-8F59-B38F8807E83E}.Release|Any CPU.Build.0 = Release|Any CPU + {6B87FB5F-F4EA-45BE-A218-385DC2CE8E80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B87FB5F-F4EA-45BE-A218-385DC2CE8E80}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B87FB5F-F4EA-45BE-A218-385DC2CE8E80}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B87FB5F-F4EA-45BE-A218-385DC2CE8E80}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -145,6 +151,7 @@ Global {4E6C54DA-576D-0955-2564-9EC890BB8279} = {BF1700D5-592E-4FFA-84E8-5480E289A1F0} {9C41A0B1-6AFE-AFC5-CE33-08052F45DAEF} = {BF1700D5-592E-4FFA-84E8-5480E289A1F0} {83ED2617-B398-4859-8F59-B38F8807E83E} = {9943209E-1744-4944-B1BA-4F87FC1A0EEB} + {6B87FB5F-F4EA-45BE-A218-385DC2CE8E80} = {E3C758DC-914D-4B7E-8457-0813F1FDB0CB} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {73E60370-756D-45AD-A19A-C40A02DACCC7}