WinForms and Console
This commit is contained in:
		
							
								
								
									
										1
									
								
								Console/.vscode/format-report.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Console/.vscode/format-report.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| [] | ||||
							
								
								
									
										30
									
								
								Console/.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Console/.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| { | ||||
|     // Use IntelliSense to learn about possible attributes. | ||||
|     // Hover to view descriptions of existing attributes. | ||||
|     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||
|     "version": "0.2.0", | ||||
|     "configurations": [ | ||||
|         { | ||||
|             "name": ".NET Core Launch (console)", | ||||
|             "type": "coreclr", | ||||
|             "request": "launch", | ||||
|             "preLaunchTask": "build", | ||||
|             "program": "${workspaceFolder}/bin/Debug/net8.0/win-x64/OI.Metrology.Console.dll", | ||||
|             "args": [ | ||||
|                 "s", | ||||
|                 "M", | ||||
|                 "L:/Git/Notes-EC-Documentation/.EC-Documentation", | ||||
|                 "-s", | ||||
|                 "L:/Git/Notes-EC-Documentation/.EC-Documentation/port" | ||||
|             ], | ||||
|             "cwd": "${workspaceFolder}", | ||||
|             "console": "integratedTerminal", | ||||
|             "stopAtEntry": false | ||||
|         }, | ||||
|         { | ||||
|             "name": ".NET Core Attach", | ||||
|             "type": "coreclr", | ||||
|             "request": "attach" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										4
									
								
								Console/.vscode/mklink.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Console/.vscode/mklink.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| # mklink | ||||
|  | ||||
| ```bash | ||||
| ``` | ||||
							
								
								
									
										37
									
								
								Console/.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Console/.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | ||||
| { | ||||
|     "[markdown]": { | ||||
|         "editor.wordWrap": "off" | ||||
|     }, | ||||
|     "files.exclude": { | ||||
|         "**/.git": false, | ||||
|       "**/node_modules": true | ||||
|     }, | ||||
|     "files.watcherExclude": { | ||||
|       "**/node_modules": true | ||||
|     }, | ||||
|     "cSpell.words": [ | ||||
|       "ASPNETCORE", | ||||
|       "BIRT", | ||||
|       "CHIL", | ||||
|       "DEAT", | ||||
|       "endianness", | ||||
|       "FAMC", | ||||
|       "FAMS", | ||||
|       "GIVN", | ||||
|       "HUSB", | ||||
|       "INDI", | ||||
|       "Infineon", | ||||
|       "Kanban", | ||||
|       "kanbn", | ||||
|       "Kofax", | ||||
|       "NSFX", | ||||
|       "OBJE", | ||||
|       "onenote", | ||||
|       "pged", | ||||
|       "Phares", | ||||
|       "Serilog", | ||||
|       "SUBM", | ||||
|       "SURN", | ||||
|       "SYSLIB" | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										99
									
								
								Console/.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								Console/.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | ||||
| { | ||||
|     "version": "2.0.0", | ||||
|     "tasks": [ | ||||
|         { | ||||
|             "label": "User Secrets Init", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "user-secrets", | ||||
|                 "-p", | ||||
|                 "${workspaceFolder}/OI.Metrology.Console.csproj", | ||||
|                 "init" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "User Secrets Set", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "user-secrets", | ||||
|                 "-p", | ||||
|                 "${workspaceFolder}/OI.Metrology.Console.csproj", | ||||
|                 "set", | ||||
|                 "asdf", | ||||
|                 "123" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Format", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "format", | ||||
|                 "--report", | ||||
|                 ".vscode", | ||||
|                 "--verbosity", | ||||
|                 "detailed", | ||||
|                 "--severity", | ||||
|                 "warn" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "build", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "build", | ||||
|                 "${workspaceFolder}/OI.Metrology.Console.csproj", | ||||
|                 "/property:GenerateFullPaths=true", | ||||
|                 "/consoleloggerparameters:NoSummary" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "publish", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "publish", | ||||
|                 "${workspaceFolder}/OI.Metrology.Console.csproj", | ||||
|                 "/property:GenerateFullPaths=true", | ||||
|                 "/consoleloggerparameters:NoSummary" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "watch", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "watch", | ||||
|                 "run", | ||||
|                 "--project", | ||||
|                 "${workspaceFolder}/OI.Metrology.Console.csproj" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Publish AOT", | ||||
|             "command": "dotnet", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "publish", | ||||
|                 "-r", | ||||
|                 "win-x64", | ||||
|                 "-c", | ||||
|                 "Release", | ||||
|                 "-p:PublishAot=true", | ||||
|                 "${workspaceFolder}/OI.Metrology.Console.csproj", | ||||
|                 "/property:GenerateFullPaths=true", | ||||
|                 "/consoleloggerparameters:NoSummary" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										21
									
								
								Console/Models/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Console/Models/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace OI.Metrology.Console.Models; | ||||
|  | ||||
| public record AppSettings(string Company) | ||||
| { | ||||
|  | ||||
|     public override string ToString() | ||||
|     { | ||||
|         string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true)] | ||||
| [JsonSerializable(typeof(AppSettings))] | ||||
| internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
							
								
								
									
										2
									
								
								Console/Models/Binder/.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Console/Models/Binder/.editorconfig
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| [*.cs] | ||||
| csharp_preserve_single_line_statements = true | ||||
							
								
								
									
										61
									
								
								Console/Models/Binder/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								Console/Models/Binder/AppSettings.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace OI.Metrology.Console.Models.Binder; | ||||
|  | ||||
| public class AppSettings | ||||
| { | ||||
|  | ||||
|     public string? Company { get; set; } | ||||
|  | ||||
|     public override string ToString() | ||||
|     { | ||||
|         string result = JsonSerializer.Serialize(this, BinderAppSettingsSourceGenerationContext.Default.AppSettings); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static void PreVerify(IConfigurationRoot configurationRoot, AppSettings? appSettings) | ||||
|     { | ||||
|         if (appSettings?.Company is null) | ||||
|         { | ||||
|             List<string> paths = []; | ||||
|             foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) | ||||
|             { | ||||
|                 if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) | ||||
|                     continue; | ||||
|                 if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) | ||||
|                     continue; | ||||
|                 paths.Add(physicalFileProvider.Root); | ||||
|             } | ||||
|             throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static Models.AppSettings Get(AppSettings? appSettings) | ||||
|     { | ||||
|         Models.AppSettings result; | ||||
|         if (appSettings is null) throw new NullReferenceException(nameof(appSettings)); | ||||
|         if (appSettings.Company is null) throw new NullReferenceException(nameof(Company)); | ||||
|         result = new(appSettings.Company); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     public static Models.AppSettings Get(IConfigurationRoot configurationRoot) | ||||
|     { | ||||
|         Models.AppSettings result; | ||||
| #pragma warning disable IL3050, IL2026 | ||||
|         AppSettings? appSettings = configurationRoot.Get<AppSettings>(); | ||||
| #pragma warning restore IL3050, IL2026 | ||||
|         PreVerify(configurationRoot, appSettings); | ||||
|         result = Get(appSettings); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true)] | ||||
| [JsonSerializable(typeof(AppSettings))] | ||||
| internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
							
								
								
									
										50
									
								
								Console/Models/WorkingDirectory.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								Console/Models/WorkingDirectory.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| namespace OI.Metrology.Console.Models; | ||||
|  | ||||
| internal abstract class WorkingDirectory | ||||
| { | ||||
|  | ||||
|     internal static string GetWorkingDirectory(string? executingAssemblyName, string subDirectoryName) | ||||
|     { | ||||
|         string result = string.Empty; | ||||
|         if (executingAssemblyName is null) | ||||
|             throw new Exception(); | ||||
|         string traceFile; | ||||
|         List<string> directories = []; | ||||
|         Environment.SpecialFolder[] specialFolders = | ||||
|         [ | ||||
|                     Environment.SpecialFolder.LocalApplicationData, | ||||
|             Environment.SpecialFolder.ApplicationData, | ||||
|             Environment.SpecialFolder.History, | ||||
|             Environment.SpecialFolder.CommonApplicationData, | ||||
|             Environment.SpecialFolder.InternetCache | ||||
|         ]; | ||||
|         foreach (Environment.SpecialFolder specialFolder in specialFolders) | ||||
|             directories.Add(Path.Combine(Environment.GetFolderPath(specialFolder), subDirectoryName, executingAssemblyName)); | ||||
|         foreach (string directory in directories) | ||||
|         { | ||||
|             for (int i = 1; i < 3; i++) | ||||
|             { | ||||
|                 if (i == 1) | ||||
|                     result = directory; | ||||
|                 else | ||||
|                     result = string.Concat("D", directory[1..]); | ||||
|                 try | ||||
|                 { | ||||
|                     if (!Directory.Exists(result)) | ||||
|                         _ = Directory.CreateDirectory(result); | ||||
|                     traceFile = string.Concat(result, @"\", DateTime.Now.Ticks, ".txt"); | ||||
|                     File.WriteAllText(traceFile, traceFile); | ||||
|                     File.Delete(traceFile); | ||||
|                     break; | ||||
|                 } | ||||
|                 catch (Exception) { result = string.Empty; } | ||||
|             } | ||||
|             if (!string.IsNullOrEmpty(result)) | ||||
|                 break; | ||||
|         } | ||||
|         if (string.IsNullOrEmpty(result)) | ||||
|             throw new Exception("Unable to set working directory!"); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										16
									
								
								Console/OI.Metrology.Console.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Console/OI.Metrology.Console.csproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
|   <PropertyGroup> | ||||
|     <ImplicitUsings>enable</ImplicitUsings> | ||||
|     <Nullable>enable</Nullable> | ||||
|     <OutputType>Exe</OutputType> | ||||
|     <RuntimeIdentifier>win-x64</RuntimeIdentifier> | ||||
|     <TargetFramework>net8.0</TargetFramework> | ||||
|     <UserSecretsId>d9488860-fd41-4dd8-9448-19f1dde7a0f7</UserSecretsId> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" /> | ||||
|     <PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="8.0.3" /> | ||||
|     <PackageReference Include="System.Text.Json" Version="8.0.3" /> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
							
								
								
									
										29
									
								
								Console/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Console/Program.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using OI.Metrology.Console.Models; | ||||
|  | ||||
| namespace OI.Metrology.Console; | ||||
|  | ||||
| internal class Program | ||||
| { | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
| #pragma warning disable IL3050 | ||||
|         HostApplicationBuilder builder = Host.CreateApplicationBuilder(args); | ||||
| #pragma warning restore IL3050 | ||||
|         _ = builder.Configuration.AddEnvironmentVariables(); | ||||
|         _ = builder.Configuration.AddUserSecrets<Program>(); | ||||
|         _ = builder.Services.AddSingleton(args.ToList()); | ||||
|         AppSettings appSettings = Models.Binder.AppSettings.Get(builder.Configuration); | ||||
|         _ = builder.Services.AddSingleton(appSettings); | ||||
|         _ = builder.Services.AddHostedService<Worker>(); | ||||
|         using IHost host = builder.Build(); | ||||
|         ILogger<Program> logger = host.Services.GetRequiredService<ILogger<Program>>(); | ||||
|         logger.LogCritical("{appSettings.Company}", appSettings.Company); | ||||
|         host.Run(); | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										67
									
								
								Console/Worker.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								Console/Worker.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using OI.Metrology.Console.Models; | ||||
| using System.Diagnostics; | ||||
|  | ||||
| namespace OI.Metrology.Console; | ||||
|  | ||||
| public class Worker : BackgroundService | ||||
| { | ||||
|  | ||||
|     private readonly List<string> _Args; | ||||
|     private readonly ILogger<Worker> _Logger; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly IHostApplicationLifetime _Lifetime; | ||||
|  | ||||
|     public Worker(ILogger<Worker> logger, IHostApplicationLifetime lifetime, List<string> args, AppSettings appSettings) | ||||
|     { | ||||
|         _Args = args; | ||||
|         _Logger = logger; | ||||
|         _Lifetime = lifetime; | ||||
|         _AppSettings = appSettings; | ||||
|     } | ||||
|  | ||||
|     public override Task StartAsync(CancellationToken cancellationToken) => | ||||
|         base.StartAsync(cancellationToken); | ||||
|  | ||||
|     public override Task StopAsync(CancellationToken cancellationToken) => | ||||
|         base.StopAsync(cancellationToken); | ||||
|  | ||||
|     protected override async Task ExecuteAsync(CancellationToken stoppingToken) | ||||
|     { | ||||
|         if (!stoppingToken.IsCancellationRequested) | ||||
|             await Task.Delay(500, stoppingToken); | ||||
|         if (_AppSettings is null) | ||||
|             throw new NullReferenceException(nameof(_AppSettings)); | ||||
|         try | ||||
|         { | ||||
|             _Logger.LogInformation("BaseDirectory: <{BaseDirectory}>", AppContext.BaseDirectory); | ||||
|             _Logger.LogInformation("CurrentDirectory: <{CurrentDirectory}>", Environment.CurrentDirectory); | ||||
|             _Logger.LogInformation("Press Escape key to get -1, Enter key to get 0, y key to get 1 and n key to get 2 exit code"); | ||||
|             ConsoleKeyInfo consoleKeyInfo = System.Console.ReadKey(); | ||||
|             if (consoleKeyInfo.Key == ConsoleKey.W) | ||||
|             { | ||||
|                 Process process = Process.Start("L:/DevOps/Mesa_FI/OI-Metrology/WinForms/bin/Debug/net8.0-windows/win-x64/OI.Metrology.WinForms.exe", "Mike"); | ||||
|                 process.WaitForExit(); | ||||
|                 _Logger.LogInformation("ExitCode: <{ExitCode}>", process.ExitCode); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 Environment.ExitCode = consoleKeyInfo.Key switch | ||||
|                 { | ||||
|                     ConsoleKey.Escape => -1, | ||||
|                     ConsoleKey.Enter => 0, | ||||
|                     ConsoleKey.Y => 1, | ||||
|                     ConsoleKey.N => 2, | ||||
|                     _ => 9 | ||||
|                 }; | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { _Logger.LogError("{Message}{NewLine}{StackTrace}", ex.Message, Environment.NewLine, ex.StackTrace); } | ||||
|         _Logger.LogInformation("Done. Press 'Enter' to end"); | ||||
|         _ = System.Console.ReadLine(); | ||||
|         _Lifetime.StopApplication(); | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										3
									
								
								Console/secrets.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Console/secrets.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|     "Company": "Infineon Technologies Americas Corp." | ||||
| } | ||||
		Reference in New Issue
	
	Block a user