diff --git a/ReleaseFiles/MORCODE.dll b/ReleaseFiles/MORCODE.dll new file mode 100644 index 0000000..d2a4075 Binary files /dev/null and b/ReleaseFiles/MORCODE.dll differ diff --git a/XP.Common/Configs/SerilogConfig.cs b/XP.Common/Configs/SerilogConfig.cs deleted file mode 100644 index ddc3fd6..0000000 --- a/XP.Common/Configs/SerilogConfig.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.IO; - -namespace XP.Common.Configs -{ - /// - /// Serilog日志配置实体(从App.config读取) - /// - public class SerilogConfig - { - /// - /// 日志输出根路径(默认:AppData/Files/Logs) - /// - public string LogPath { get; set; } = Path.Combine( - Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), - "Files", "Logs"); - - /// - /// 最低日志级别(Debug/Info/Warn/Error/Fatal) - /// - public string MinimumLevel { get; set; } = "Info"; - - /// - /// 是否输出到控制台(调试环境=true,生产环境=false) - /// - public bool EnableConsole { get; set; } = true; - - /// - /// 日志文件分割规则(Day/Month/Hour/Size) - /// - public string RollingInterval { get; set; } = "Day"; - - /// - /// 单个日志文件最大大小(MB,仅Size分割时生效) - /// - public long FileSizeLimitMB { get; set; } = 100; - - /// - /// 保留日志文件数量(默认30天) - /// - public int RetainedFileCountLimit { get; set; } = 30; - } -} \ No newline at end of file diff --git a/XP.Common/Configs/SqliteConfig.cs b/XP.Common/Configs/SqliteConfig.cs deleted file mode 100644 index 28eae43..0000000 --- a/XP.Common/Configs/SqliteConfig.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace XP.Common.Configs -{ - /// - /// SQLite 配置实体 - /// - public class SqliteConfig - { - /// - /// 数据库文件路径 - /// - public string DbFilePath { get; set; } = Path.Combine( - Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), - "Files", "Data", "XP.db"); - - /// - /// 连接超时时间(秒,默认30) - /// - public int ConnectionTimeout { get; set; } = 30; - - /// - /// 数据库不存在时是否自动创建(默认true) - /// - public bool CreateIfNotExists { get; set; } = true; - - /// - /// 是否启用 WAL 模式(提升并发性能,默认true) - /// - public bool EnableWalMode { get; set; } = true; - - /// - /// 是否开启日志记录(记录所有SQL操作,默认false) - /// - public bool EnableSqlLogging { get; set; } = false; - - /// - /// 获取SQLite连接字符串 - /// - public string GetConnectionString() - { - var builder = new Microsoft.Data.Sqlite.SqliteConnectionStringBuilder - { - DataSource = DbFilePath, - Cache = Microsoft.Data.Sqlite.SqliteCacheMode.Default, - DefaultTimeout = ConnectionTimeout - }; - return builder.ToString(); - } - } -} diff --git a/XP.Common/Helpers/ConfigLoader.cs b/XP.Common/Helpers/ConfigLoader.cs deleted file mode 100644 index 60d29ab..0000000 --- a/XP.Common/Helpers/ConfigLoader.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Configuration; -using XP.Common.Configs; -using XP.Common.Dump.Configs; - -namespace XP.Common.Helpers -{ - /// - /// 通用配置加载工具(读取App.config) - /// - public static class ConfigLoader - { - /// - /// 加载Serilog配置 - /// - public static SerilogConfig LoadSerilogConfig() - { - var config = new SerilogConfig(); - - var logPath = ConfigurationManager.AppSettings["Serilog:LogPath"]; - if (!string.IsNullOrEmpty(logPath)) config.LogPath = logPath; - - var minLevel = ConfigurationManager.AppSettings["Serilog:MinimumLevel"]; - if (!string.IsNullOrEmpty(minLevel)) config.MinimumLevel = minLevel; - - var enableConsole = ConfigurationManager.AppSettings["Serilog:EnableConsole"]; - if (bool.TryParse(enableConsole, out var console)) config.EnableConsole = console; - - var rollingInterval = ConfigurationManager.AppSettings["Serilog:RollingInterval"]; - if (!string.IsNullOrEmpty(rollingInterval)) config.RollingInterval = rollingInterval; - - var fileSize = ConfigurationManager.AppSettings["Serilog:FileSizeLimitMB"]; - if (long.TryParse(fileSize, out var size)) config.FileSizeLimitMB = size; - - var retainCount = ConfigurationManager.AppSettings["Serilog:RetainedFileCountLimit"]; - if (int.TryParse(retainCount, out var count)) config.RetainedFileCountLimit = count; - - return config; - } - - /// - /// 加载SQLite配置 - /// - public static SqliteConfig LoadSqliteConfig() - { - var config = new SqliteConfig(); - - var dbPath = ConfigurationManager.AppSettings["Sqlite:DbFilePath"]; - if (!string.IsNullOrEmpty(dbPath)) config.DbFilePath = dbPath; - - var timeout = ConfigurationManager.AppSettings["Sqlite:ConnectionTimeout"]; - if (int.TryParse(timeout, out var t)) config.ConnectionTimeout = t; - - var createIfNotExists = ConfigurationManager.AppSettings["Sqlite:CreateIfNotExists"]; - if (bool.TryParse(createIfNotExists, out var c)) config.CreateIfNotExists = c; - - var enableWal = ConfigurationManager.AppSettings["Sqlite:EnableWalMode"]; - if (bool.TryParse(enableWal, out var w)) config.EnableWalMode = w; - - var enableSqlLog = ConfigurationManager.AppSettings["Sqlite:EnableSqlLogging"]; - if (bool.TryParse(enableSqlLog, out var l)) config.EnableSqlLogging = l; - - return config; - } - - /// - /// 加载 Dump 配置 | Load Dump configuration - /// - public static DumpConfig LoadDumpConfig() - { - var config = new DumpConfig(); - - var storagePath = ConfigurationManager.AppSettings["Dump:StoragePath"]; - if (!string.IsNullOrEmpty(storagePath)) config.StoragePath = storagePath; - - var enableScheduled = ConfigurationManager.AppSettings["Dump:EnableScheduledDump"]; - if (bool.TryParse(enableScheduled, out var enabled)) config.EnableScheduledDump = enabled; - - var interval = ConfigurationManager.AppSettings["Dump:ScheduledIntervalMinutes"]; - if (int.TryParse(interval, out var min)) config.ScheduledIntervalMinutes = min; - - var sizeLimit = ConfigurationManager.AppSettings["Dump:MiniDumpSizeLimitMB"]; - if (long.TryParse(sizeLimit, out var size)) config.MiniDumpSizeLimitMB = size; - - var retentionDays = ConfigurationManager.AppSettings["Dump:RetentionDays"]; - if (int.TryParse(retentionDays, out var days)) config.RetentionDays = days; - - return config; - } - - } -} \ No newline at end of file diff --git a/XP.Common/License/Configs/ConfigLoader.cs b/XP.Common/License/Configs/ConfigLoader.cs new file mode 100644 index 0000000..0fc4bad --- /dev/null +++ b/XP.Common/License/Configs/ConfigLoader.cs @@ -0,0 +1,102 @@ +using System.Configuration; + +namespace XP.Common.License.Configs +{ + /// + /// 授权配置加载器,从 App.config 读取授权相关配置项 | License configuration loader, reads license-related configuration from App.config + /// + public static class ConfigLoader + { + /// + /// 配置键前缀 | Configuration key prefix + /// + private const string KeyPrefix = "License:"; + + /// + /// LicenseMode 有效值集合 | Valid values for LicenseMode + /// + private static readonly int[] ValidLicenseModes = { 0, 885 }; + + /// + /// LicenseState 有效值集合 | Valid values for LicenseState + /// + private static readonly int[] ValidLicenseStates = { 10, 20 }; + + /// + /// 从 App.config 加载授权配置 | Load license configuration from App.config + /// + /// 授权配置实体,缺失或无效配置项使用默认值 | License configuration entity, uses default values for missing or invalid items + public static LicenseConfig LoadLicenseConfig() + { + var config = new LicenseConfig(); + + // 加载 LicenseMode | Load LicenseMode + var licenseModeStr = ConfigurationManager.AppSettings[KeyPrefix + "LicenseMode"]; + if (int.TryParse(licenseModeStr, out var licenseMode) && IsValidLicenseMode(licenseMode)) + { + config.LicenseMode = licenseMode; + } + + // 加载 ModuleId | Load ModuleId + var moduleIdStr = ConfigurationManager.AppSettings[KeyPrefix + "ModuleId"]; + if (ushort.TryParse(moduleIdStr, out var moduleId) && IsValidModuleId(moduleId)) + { + config.ModuleId = moduleId; + } + + // 加载 UseSma | Load UseSma + var useSmaStr = ConfigurationManager.AppSettings[KeyPrefix + "UseSma"]; + if (bool.TryParse(useSmaStr, out var useSma)) + { + config.UseSma = useSma; + } + + // 加载 LicenseState | Load LicenseState + var licenseStateStr = ConfigurationManager.AppSettings[KeyPrefix + "LicenseState"]; + if (int.TryParse(licenseStateStr, out var licenseState) && IsValidLicenseState(licenseState)) + { + config.LicenseState = licenseState; + } + + return config; + } + + /// + /// 验证 LicenseMode 值是否有效 | Validate whether LicenseMode value is valid + /// + /// 待验证的值 | Value to validate + /// true 表示有效,false 表示无效 | true if valid, false if invalid + private static bool IsValidLicenseMode(int value) + { + foreach (var valid in ValidLicenseModes) + { + if (value == valid) return true; + } + return false; + } + + /// + /// 验证 ModuleId 值是否在有效范围内 | Validate whether ModuleId value is within valid range + /// + /// 待验证的值 | Value to validate + /// true 表示有效,false 表示无效 | true if valid, false if invalid + private static bool IsValidModuleId(ushort value) + { + return value >= 1 && value <= 65535; + } + + /// + /// 验证 LicenseState 值是否有效 | Validate whether LicenseState value is valid + /// + /// 待验证的值 | Value to validate + /// true 表示有效,false 表示无效 | true if valid, false if invalid + private static bool IsValidLicenseState(int value) + { + foreach (var valid in ValidLicenseStates) + { + if (value == valid) return true; + } + return false; + } + } +} diff --git a/XP.Common/License/Configs/LicenseConfig.cs b/XP.Common/License/Configs/LicenseConfig.cs new file mode 100644 index 0000000..386d39d --- /dev/null +++ b/XP.Common/License/Configs/LicenseConfig.cs @@ -0,0 +1,28 @@ +namespace XP.Common.License.Configs +{ + /// + /// 授权配置实体 | License configuration entity + /// + public class LicenseConfig + { + /// + /// 授权模式 | License mode + /// + public int LicenseMode { get; set; } = 0; + + /// + /// 模块ID | Module ID + /// + public ushort ModuleId { get; set; } = 4; + + /// + /// 是否使用SMA | Whether to use SMA + /// + public bool UseSma { get; set; } = false; + + /// + /// 授权状态 | License state + /// + public int LicenseState { get; set; } = 20; + } +} diff --git a/XP.Common/License/Enums/LicenseMode.cs b/XP.Common/License/Enums/LicenseMode.cs new file mode 100644 index 0000000..2646fa4 --- /dev/null +++ b/XP.Common/License/Enums/LicenseMode.cs @@ -0,0 +1,17 @@ +namespace XP.Common.License.Enums; + +/// +/// 授权模式枚举 | License mode enumeration +/// +public enum LicenseMode : int +{ + /// + /// CLMS 正式授权 | CLMS formal authorization + /// + Clms = 0, + + /// + /// 临时测试模式(15分钟)| Temporary test mode (15 minutes) + /// + TemporaryTest = 885 +} diff --git a/XP.Common/License/Enums/LicenseState.cs b/XP.Common/License/Enums/LicenseState.cs new file mode 100644 index 0000000..940e20b --- /dev/null +++ b/XP.Common/License/Enums/LicenseState.cs @@ -0,0 +1,17 @@ +namespace XP.Common.License.Enums; + +/// +/// 授权状态枚举 | License state enumeration +/// +public enum LicenseState : int +{ + /// + /// 授权成功 | Authorization successful + /// + Success = 10, + + /// + /// 授权失败 | Authorization failed + /// + Fail = 20 +} diff --git a/XP.Common/License/Implementations/LicenseCheckResult.cs b/XP.Common/License/Implementations/LicenseCheckResult.cs new file mode 100644 index 0000000..b901791 --- /dev/null +++ b/XP.Common/License/Implementations/LicenseCheckResult.cs @@ -0,0 +1,91 @@ +using System; +using XP.Common.License.Enums; + +namespace XP.Common.License.Implementations +{ + /// + /// 授权检查结果(不可变)| License check result (immutable) + /// + public sealed class LicenseCheckResult + { + /// + /// 消息最大长度 | Maximum message length + /// + private const int MaxMessageLength = 512; + + /// + /// 是否授权成功 | Whether authorization is successful + /// + public bool IsAuthorized { get; } + + /// + /// 结果消息(最大512字符)| Result message (maximum 512 characters) + /// + public string Message { get; } + + /// + /// 授权模式 | License mode + /// + public LicenseMode LicenseMode { get; } + + /// + /// 模块ID | Module ID + /// + public ushort ModuleId { get; } + + /// + /// 授权到期日期 | License expiration date + /// + public DateTime? ExpirationDate { get; } + + /// + /// SMA到期日期 | SMA expiration date + /// + public DateTime? SmaDate { get; } + + /// + /// 浮动许可IP地址 | Floating license IP address + /// + public string? FloatingLicenseIp { get; } + + /// + /// 浮动许可端口 | Floating license port + /// + public string? FloatingLicensePort { get; } + + /// + /// 构造函数 | Constructor + /// + /// 是否授权成功 | Whether authorization is successful + /// 结果消息 | Result message + /// 授权模式 | License mode + /// 模块ID | Module ID + /// 授权到期日期 | License expiration date + /// SMA到期日期 | SMA expiration date + /// 浮动许可IP地址 | Floating license IP address + /// 浮动许可端口 | Floating license port + public LicenseCheckResult( + bool isAuthorized, + string message, + LicenseMode licenseMode, + ushort moduleId, + DateTime? expirationDate, + DateTime? smaDate, + string? floatingLicenseIp, + string? floatingLicensePort) + { + IsAuthorized = isAuthorized; + Message = string.IsNullOrEmpty(message) + ? string.Empty + : message.Length > MaxMessageLength + ? message[..MaxMessageLength] + : message; + LicenseMode = licenseMode; + ModuleId = moduleId; + ExpirationDate = expirationDate; + SmaDate = smaDate; + FloatingLicenseIp = floatingLicenseIp; + FloatingLicensePort = floatingLicensePort; + } + } +} \ No newline at end of file diff --git a/XP.Common/License/Implementations/LicenseService.cs b/XP.Common/License/Implementations/LicenseService.cs new file mode 100644 index 0000000..622183d --- /dev/null +++ b/XP.Common/License/Implementations/LicenseService.cs @@ -0,0 +1,595 @@ +using System; +using System.Configuration; +using System.Reflection; +using System.Text; +using System.Threading; +using XP.Common.License.Configs; +using XP.Common.License.Enums; +using XP.Common.License.Interfaces; +using XP.Common.License.Native; +using XP.Common.Logging.Interfaces; + +namespace XP.Common.License.Implementations +{ + /// + /// 授权服务实现 | License service implementation + /// + public class LicenseService : ILicenseService, IDisposable + { + /// + /// 临时测试模式初始时间(秒)| Temporary test mode initial time (seconds) + /// + private const int TestModeInitialSeconds = 900; + + /// + /// 授权配置 | License configuration + /// + private readonly LicenseConfig _config; + + /// + /// 日志服务 | Logger service + /// + private readonly ILoggerService _logger; + + /// + /// 同步锁对象 | Synchronization lock object + /// + private readonly object _lock = new object(); + + /// + /// 临时测试模式计时器 | Temporary test mode timer + /// + private Timer? _testModeTimer; + + /// + /// 临时测试模式剩余时间(秒)| Temporary test mode remaining time (seconds) + /// + private int _remainingTestSeconds = TestModeInitialSeconds; + + /// + /// 授权到期日期 | License expiration date + /// + private DateTime? _expirationDate; + + /// + /// SMA到期日期 | SMA expiration date + /// + private DateTime? _smaDate; + + /// + /// 浮动许可IP地址 | Floating license IP address + /// + private string? _floatingLicenseIp; + + /// + /// 浮动许可端口 | Floating license port + /// + private string? _floatingLicensePort; + + /// + /// 是否已释放 | Whether disposed + /// + private bool _disposed; + + /// + /// 构造函数 | Constructor + /// + /// 授权配置 | License configuration + /// 日志服务 | Logger service + public LicenseService(LicenseConfig config, ILoggerService logger) + { + _config = config ?? throw new ArgumentNullException(nameof(config)); + _logger = logger?.ForModule() ?? throw new ArgumentNullException(nameof(logger)); + LicenseMode = (LicenseMode)_config.LicenseMode; + } + + /// + /// 当前会话是否已授权 | Whether the current session is authorized + /// + public bool IsAuthorized { get; private set; } + + /// + /// 当前授权模式 | Current license mode + /// + public LicenseMode LicenseMode { get; private set; } + + /// + /// 临时测试模式超时事件(到期时触发)| Temporary test mode timeout event (fires when expired) + /// + public event EventHandler? TestModeTimeout; + + /// + /// 临时测试模式剩余5分钟警告事件 | Temporary test mode 5-minute warning event + /// + public event EventHandler? TestModeWarning5Min; + + /// + /// 临时测试模式剩余1分钟警告事件 | Temporary test mode 1-minute warning event + /// + public event EventHandler? TestModeWarning1Min; + + /// + /// 是否已触发5分钟警告 | Whether 5-minute warning has been fired + /// + private bool _warning5MinFired; + + /// + /// 是否已触发1分钟警告 | Whether 1-minute warning has been fired + /// + private bool _warning1MinFired; + + /// + /// 执行授权检查 | Perform authorization check + /// + /// 授权检查结果 | License check result + public LicenseCheckResult CheckAuthorization() + { + lock (_lock) + { + _logger.Info("开始授权检查,模式={Mode} | Starting authorization check, mode={Mode}", (int)LicenseMode); + + if (LicenseMode == Enums.LicenseMode.TemporaryTest) + { + return HandleTemporaryTestMode(); + } + + return HandleClmsAuthorization(); + } + } + + /// + /// 获取授权到期日期 | Get license expiration date + /// + /// 授权到期日期,未授权时返回 null | License expiration date, null if not authorized + public DateTime? GetExpirationDate() + { + lock (_lock) + { + return _expirationDate; + } + } + + /// + /// 检查模块是否授权 | Check if module is licensed + /// + /// 模块ID | Module ID + /// 模块是否授权 | Whether the module is licensed + public bool IsModuleLicensed(ushort moduleId) + { + lock (_lock) + { + if (!IsAuthorized) + return false; + + try + { + ushort mod = moduleId; + ushort type = 0; + return NativeMethods.CLM_ModuleIsLicensed(ref mod, ref type); + } + catch (DllNotFoundException ex) + { + _logger.Error(ex, "MORCODE.dll 加载失败 | Failed to load MORCODE.dll"); + return false; + } + catch (EntryPointNotFoundException ex) + { + _logger.Error(ex, "MORCODE.dll 中缺少入口点 | Missing entry point in MORCODE.dll"); + return false; + } + } + } + + /// + /// 获取SMA到期日期 | Get SMA expiration date + /// + /// SMA到期日期,未启用时返回 null | SMA expiration date, null if not enabled + public DateTime? GetSmaDate() + { + lock (_lock) + { + return _smaDate; + } + } + + /// + /// 获取临时测试模式剩余时间 | Get remaining time in temporary test mode + /// + /// 剩余时间(秒),非测试模式返回 -1 | Remaining time in seconds, -1 if not in test mode + public int GetRemainingTestTime() + { + if (LicenseMode != Enums.LicenseMode.TemporaryTest) + return -1; + + return Interlocked.CompareExchange(ref _remainingTestSeconds, 0, 0); + } + + /// + /// 释放资源 | Release resources + /// + public void Dispose() + { + if (_disposed) + return; + + _disposed = true; + + // 停止计时器 | Stop timer + _testModeTimer?.Dispose(); + _testModeTimer = null; + + // 尝试登出 | Try to logout + try + { + NativeMethods.CLM_Logout(); + } + catch (Exception ex) + { + _logger.Error(ex, "CLM_Logout 调用失败 | CLM_Logout call failed"); + } + } + + /// + /// 处理临时测试模式 | Handle temporary test mode + /// + /// 授权检查结果 | License check result + private LicenseCheckResult HandleTemporaryTestMode() + { + IsAuthorized = true; + _remainingTestSeconds = TestModeInitialSeconds; + + // 启动计时器,每秒递减 | Start timer, decrement every second + _testModeTimer?.Dispose(); + _testModeTimer = new Timer(TestModeTimerCallback, null, 1000, 1000); + + _logger.Info("临时测试模式已启动,剩余时间={Seconds}秒 | Temporary test mode started, remaining time={Seconds}s", TestModeInitialSeconds); + + WriteLicenseStateToConfig(LicenseState.Success); + + return new LicenseCheckResult( + isAuthorized: true, + message: "临时测试模式已启动,有效时间15分钟 | Temporary test mode started, valid for 15 minutes", + licenseMode: Enums.LicenseMode.TemporaryTest, + moduleId: _config.ModuleId, + expirationDate: null, + smaDate: null, + floatingLicenseIp: null, + floatingLicensePort: null); + } + + /// + /// 临时测试模式计时器回调 | Temporary test mode timer callback + /// + /// 状态对象 | State object + private void TestModeTimerCallback(object? state) + { + int remaining = Interlocked.Decrement(ref _remainingTestSeconds); + + // 剩余5分钟(300秒)时触发警告 | Fire warning at 5 minutes (300 seconds) remaining + if (remaining <= 300 && !_warning5MinFired) + { + _warning5MinFired = true; + _logger.Warn("临时测试模式剩余5分钟 | Temporary test mode: 5 minutes remaining"); + TestModeWarning5Min?.Invoke(this, EventArgs.Empty); + } + + // 剩余1分钟(60秒)时触发警告 | Fire warning at 1 minute (60 seconds) remaining + if (remaining <= 60 && !_warning1MinFired) + { + _warning1MinFired = true; + _logger.Warn("临时测试模式剩余1分钟 | Temporary test mode: 1 minute remaining"); + TestModeWarning1Min?.Invoke(this, EventArgs.Empty); + } + + // 到期时触发超时事件 | Fire timeout event when expired + if (remaining <= 0) + { + // 停止计时器 | Stop timer + _testModeTimer?.Dispose(); + _testModeTimer = null; + + _logger.Info("临时测试模式已超时 | Temporary test mode has timed out"); + + // 触发超时事件 | Raise timeout event + TestModeTimeout?.Invoke(this, EventArgs.Empty); + } + } + + /// + /// 处理 CLMS 正式授权流程 | Handle CLMS formal authorization flow + /// 兼容新旧版本 SDK:对可能不存在的入口点使用 TryInvoke 优雅降级 | + /// Compatible with old/new SDK: gracefully degrades for missing entry points via TryInvoke + /// + /// 授权检查结果 | License check result + private LicenseCheckResult HandleClmsAuthorization() + { + try + { + // 步骤 1:检查系统时间(可选,老版本 SDK 可能不支持)| Step 1: Check system time (optional, old SDK may not support) + if (!TryInvokeOptional(() => NativeMethods.CLM_CheckSystemTime(), "CLM_CheckSystemTime", out bool checkTimeResult)) + { + // 入口点不存在,跳过此步骤 | Entry point not found, skip this step + _logger.Warn("CLM_CheckSystemTime 入口点不存在,跳过系统时间检查(SDK版本较旧)| CLM_CheckSystemTime entry point not found, skipping system time check (older SDK version)"); + } + else if (!checkTimeResult) + { + _logger.Error(new InvalidOperationException("CLM_CheckSystemTime"), "系统时间检查异常 | System time check anomaly"); + return CreateFailureResult("系统时间检查异常 | System time check anomaly"); + } + else + { + _logger.Info("系统时间检查正常 | System time check: OK"); + } + + // 步骤 2:登录验证(核心,必须存在)| Step 2: Login verification (core, must exist) + StringBuilder password = new StringBuilder("FnEoFWSNLpVeoNWYhVoHLfgITRvieSszJfylVsXOTsLkphgkPzPhbLQzQrvRbNOkVVIQyMWkyGVjWSaiYUEksfQsRmklksLxrmeTksKKNMoZoWfZeDaLDSyWwEmtQakvSNxBMBLHoLEZHtaoXNpTWiaUGaSLQdsHFZnbRyPehytarNTKpaNNqnjFNggqWifhFsrZasDsWbIGWDrhnGrdtUNDMjJdhlTunsssxCzYpsLQrWBxUkuUUEJraSbTlbuX"); + if (!NativeMethods.CLM_Login(password)) + { + _logger.Error(new InvalidOperationException("CLM_Login"), "CLM_Login 登录验证失败 | CLM_Login verification failed"); + return CreateFailureResult("CLM_Login 登录验证失败 | CLM_Login verification failed"); + } + _logger.Info("CLM_Login 登录验证成功 | CLM_Login verification: OK"); + + // 步骤 3:检查许可范围(核心,必须存在)| Step 3: Check license scope (core, must exist) + if (!NativeMethods.CLM_Login_Scope()) + { + _logger.Error(new InvalidOperationException("CLM_Login_Scope"), "CLM_Login_Scope 许可范围检查失败 | CLM_Login_Scope scope check failed"); + return CreateFailureResult("CLM_Login_Scope 许可范围检查失败 | CLM_Login_Scope scope check failed"); + } + _logger.Info("CLM_Login_Scope 许可范围检查成功 | CLM_Login_Scope scope check: OK"); + + // 步骤 4:SMA 验证(如果启用,可选入口点)| Step 4: SMA validation (if enabled, optional entry point) + if (_config.UseSma) + { + var smaResult = ValidateSma(); + if (smaResult != null) + return smaResult; + } + else + { + _logger.Info("放弃检查SMA | SMA check skipped"); + } + + // 步骤 5:获取浮动许可IP和端口(可选,老版本 SDK 可能不支持)| Step 5: Get floating license IP and port (optional, old SDK may not support) + StringBuilder ip = new StringBuilder(256); + StringBuilder port = new StringBuilder(256); + if (!TryInvokeOptional(() => NativeMethods.CLM_GetIP(ip, port), "CLM_GetIP", out bool getIpResult)) + { + _logger.Warn("CLM_GetIP 入口点不存在,跳过浮动许可IP获取(SDK版本较旧)| CLM_GetIP entry point not found, skipping floating license IP retrieval (older SDK version)"); + } + else if (!getIpResult) + { + _logger.Error(new InvalidOperationException("CLM_GetIP"), "CLM_GetIP 获取浮动许可IP失败 | CLM_GetIP floating license IP retrieval failed"); + return CreateFailureResult("CLM_GetIP 获取浮动许可IP失败 | CLM_GetIP floating license IP retrieval failed"); + } + else + { + _floatingLicenseIp = ip.ToString(); + _floatingLicensePort = port.ToString(); + _logger.Info("CLM_GetIP 成功: ip={Ip}/port={Port} | CLM_GetIP success: ip={Ip}/port={Port}", _floatingLicenseIp, _floatingLicensePort); + } + + // 步骤 6:获取错误信息(可选,老版本 SDK 可能不支持)| Step 6: Get error message (optional, old SDK may not support) + StringBuilder error = new StringBuilder(512); + if (!TryInvokeOptional(() => NativeMethods.CLM_GetError(error), "CLM_GetError", out bool getErrorResult)) + { + _logger.Warn("CLM_GetError 入口点不存在,跳过错误信息获取(SDK版本较旧)| CLM_GetError entry point not found, skipping error retrieval (older SDK version)"); + } + else if (!getErrorResult) + { + _logger.Error(new InvalidOperationException("CLM_GetError"), "CLM_GetError 获取错误信息失败 | CLM_GetError error retrieval failed"); + return CreateFailureResult("CLM_GetError 获取错误信息失败 | CLM_GetError error retrieval failed"); + } + else + { + _logger.Info("CLM_GetError 成功: {Error} | CLM_GetError success: {Error}", error.ToString()); + } + + // 步骤 7:检查模块授权(核心,必须存在)| Step 7: Check module authorization (core, must exist) + ushort moduleId = _config.ModuleId; + ushort type = 0; + if (!NativeMethods.CLM_ModuleIsLicensed(ref moduleId, ref type)) + { + _logger.Error(new InvalidOperationException("CLM_ModuleIsLicensed"), "模块号码{ModuleId}不可用 | Module {ModuleId} unavailable", moduleId); + return CreateFailureResult($"模块号码{moduleId}不可用 | Module {moduleId} unavailable"); + } + _logger.Info("模块号码{ModuleId}有效 | Module {ModuleId} available", moduleId); + + // 步骤 8:获取授权到期日期(核心,必须存在)| Step 8: Get warranty expiration date (core, must exist) + int month = 0, day = 0, year = 0; + if (!NativeMethods.CLM_GetWarrantyExpiration(ref month, ref day, ref year)) + { + _logger.Error(new InvalidOperationException("CLM_GetWarrantyExpiration"), "获取授权到期日期失败 | Failed to get warranty expiration date"); + return CreateFailureResult("获取授权到期日期失败 | Failed to get warranty expiration date"); + } + + _expirationDate = new DateTime(year, month, day); + _logger.Info("CLM_GetWarrantyExpiration 成功: {Year}/{Month}/{Day} | CLM_GetWarrantyExpiration success: {Year}/{Month}/{Day}", year, month, day); + + // 检查是否在30天内到期 | Check if expiring within 30 days + string warningMessage = string.Empty; + TimeSpan timeToExpiry = _expirationDate.Value - DateTime.Now; + if (timeToExpiry.Days <= 30) + { + warningMessage = $"软件授权将于{year}年{month}月{day}日到期,请尽快联系海克斯康 | Software license will expire on {year}-{month}-{day}, please contact Hexagon"; + _logger.Warn(warningMessage); + } + + // 授权成功 | Authorization successful + IsAuthorized = true; + WriteLicenseStateToConfig(LicenseState.Success); + + string successMessage = string.IsNullOrEmpty(warningMessage) + ? "授权检查成功 | Authorization check successful" + : $"授权检查成功(警告:{warningMessage})| Authorization check successful (Warning: {warningMessage})"; + + _logger.Info("授权检查完成 | Authorization check completed: Mode={Mode}, State={State}, Expiration={Expiration}", + (int)LicenseMode, + (int)LicenseState.Success, + _expirationDate?.ToString("yyyy-MM-dd") ?? "N/A"); + + return new LicenseCheckResult( + isAuthorized: true, + message: successMessage, + licenseMode: LicenseMode, + moduleId: _config.ModuleId, + expirationDate: _expirationDate, + smaDate: _smaDate, + floatingLicenseIp: _floatingLicenseIp, + floatingLicensePort: _floatingLicensePort); + } + catch (DllNotFoundException ex) + { + _logger.Error(ex, "MORCODE.dll 加载失败 | Failed to load MORCODE.dll"); + return CreateFailureResult("CLMS SDK 不可用 | CLMS SDK unavailable"); + } + } + + /// + /// 尝试调用可选的 SDK 方法,兼容老版本 SDK 中不存在的入口点 | + /// Try to invoke an optional SDK method, compatible with missing entry points in older SDK versions + /// + /// 要调用的方法委托 | Method delegate to invoke + /// 方法名称(用于日志)| Method name (for logging) + /// 方法返回值,入口点不存在时为 default | Method return value, default if entry point not found + /// true: 入口点存在并已调用; false: 入口点不存在(EntryPointNotFoundException)| true: entry point exists and was invoked; false: entry point not found + private bool TryInvokeOptional(Func action, string methodName, out bool result) + { + try + { + result = action(); + return true; + } + catch (EntryPointNotFoundException) + { + result = default; + return false; + } + } + + /// + /// 验证 SMA | Validate SMA + /// 兼容老版本 SDK:CLM_GetSmaDate 入口点不存在时跳过 SMA 验证 | + /// Compatible with old SDK: skips SMA validation if CLM_GetSmaDate entry point not found + /// + /// 失败时返回失败结果,成功或跳过时返回 null | Returns failure result on failure, null on success or skip + private LicenseCheckResult? ValidateSma() + { + int yearSma = 0, monthSma = 0, daySma = 0; + + // CLM_GetSmaDate 在老版本 SDK 中可能不存在 | CLM_GetSmaDate may not exist in older SDK + try + { + if (!NativeMethods.CLM_GetSmaDate(ref monthSma, ref daySma, ref yearSma)) + { + _logger.Error(new InvalidOperationException("CLM_GetSmaDate"), "检查SMA失败 | SMA check failed"); + return CreateFailureResult("检查SMA失败 | SMA check failed"); + } + } + catch (EntryPointNotFoundException) + { + _logger.Warn("CLM_GetSmaDate 入口点不存在,跳过SMA验证(SDK版本较旧)| CLM_GetSmaDate entry point not found, skipping SMA validation (older SDK version)"); + return null; + } + + _logger.Info("CLM_GetSmaDate 成功: {Year}/{Month}/{Day} | CLM_GetSmaDate success: {Year}/{Month}/{Day}", yearSma, monthSma, daySma); + + // 获取软件版本信息 | Get software version information + var version = Assembly.GetExecutingAssembly().GetName().Version; + int major = version?.Major ?? 0; + int minor = version?.Minor ?? 0; + + // SMA 年份 < 软件主版本号 → 失败 | SMA year < software major version → failure + if (yearSma < major) + { + string msg = $"CLMS授权中SMA年份{yearSma}小于软件主版本号(年份){major},请联系海克斯康升级许可 | SMA year {yearSma} is less than software major version {major}, please contact Hexagon to upgrade license"; + _logger.Error(new InvalidOperationException("SMA验证失败"), msg); + return CreateFailureResult(msg); + } + + // SMA 年份 == 软件主版本号时,校验季度 | When SMA year == software major version, validate quarter + if (yearSma == major) + { + try + { + DateTime smaDate = new DateTime(yearSma, monthSma, daySma); + int smaQuarter = (smaDate.Month - 1) / 3 + 1; + + if (minor > smaQuarter) + { + string msg = $"CLMS授权日期{yearSma}/{monthSma}/{daySma}属于{yearSma}年第{smaQuarter}季度,不支持当前{major}年第{minor}季度的软件版本 | SMA date {yearSma}/{monthSma}/{daySma} is in Q{smaQuarter} of {yearSma}, does not support current Q{minor} of {major} software version"; + _logger.Error(new InvalidOperationException("SMA季度验证失败"), msg); + return CreateFailureResult(msg); + } + } + catch (Exception ex) + { + string msg = $"SMA授权日期{yearSma}/{monthSma}/{daySma}不合法 | SMA date {yearSma}/{monthSma}/{daySma} is invalid: {ex.Message}"; + _logger.Error(ex, msg); + return CreateFailureResult(msg); + } + } + + _smaDate = new DateTime(yearSma, monthSma, daySma); + _logger.Info("SMA校验成功,SMA有效期至{Year}/{Month}/{Day} | SMA validation successful, valid until {Year}/{Month}/{Day}", yearSma, monthSma, daySma); + return null; + } + + /// + /// 创建失败结果 | Create failure result + /// + /// 失败消息 | Failure message + /// 授权检查失败结果 | License check failure result + private LicenseCheckResult CreateFailureResult(string message) + { + IsAuthorized = false; + WriteLicenseStateToConfig(LicenseState.Fail); + + _logger.Info("授权检查完成 | Authorization check completed: Mode={Mode}, State={State}, Expiration={Expiration}", + (int)LicenseMode, + (int)LicenseState.Fail, + "N/A"); + + return new LicenseCheckResult( + isAuthorized: false, + message: message, + licenseMode: LicenseMode, + moduleId: _config.ModuleId, + expirationDate: null, + smaDate: _smaDate, + floatingLicenseIp: _floatingLicenseIp, + floatingLicensePort: _floatingLicensePort); + } + + /// + /// 写入授权状态到配置文件 | Write license state to configuration file + /// + /// 授权状态 | License state + private void WriteLicenseStateToConfig(LicenseState state) + { + try + { + var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); + var settings = config.AppSettings.Settings; + + if (settings["License:LicenseState"] == null) + { + settings.Add("License:LicenseState", ((int)state).ToString()); + } + else + { + settings["License:LicenseState"].Value = ((int)state).ToString(); + } + + config.Save(ConfigurationSaveMode.Modified); + ConfigurationManager.RefreshSection("appSettings"); + + _logger.Info("授权状态已写入配置: {State} | License state written to config: {State}", (int)state); + } + catch (Exception ex) + { + _logger.Error(ex, "写入授权状态到配置失败 | Failed to write license state to config"); + } + } + } +} diff --git a/XP.Common/License/Interfaces/ILicenseService.cs b/XP.Common/License/Interfaces/ILicenseService.cs new file mode 100644 index 0000000..50d1649 --- /dev/null +++ b/XP.Common/License/Interfaces/ILicenseService.cs @@ -0,0 +1,67 @@ +using System; +using XP.Common.License.Enums; +using XP.Common.License.Implementations; + +namespace XP.Common.License.Interfaces; + +/// +/// 授权服务接口 | License service interface +/// +public interface ILicenseService +{ + /// + /// 执行授权检查 | Perform authorization check + /// + /// 授权检查结果 | License check result + LicenseCheckResult CheckAuthorization(); + + /// + /// 当前会话是否已授权 | Whether the current session is authorized + /// + bool IsAuthorized { get; } + + /// + /// 获取授权到期日期 | Get license expiration date + /// + /// 授权到期日期,未授权时返回 null | License expiration date, null if not authorized + DateTime? GetExpirationDate(); + + /// + /// 检查模块是否授权 | Check if module is licensed + /// + /// 模块ID | Module ID + /// 模块是否授权 | Whether the module is licensed + bool IsModuleLicensed(ushort moduleId); + + /// + /// 获取SMA到期日期 | Get SMA expiration date + /// + /// SMA到期日期,未启用时返回 null | SMA expiration date, null if not enabled + DateTime? GetSmaDate(); + + /// + /// 当前授权模式 | Current license mode + /// + LicenseMode LicenseMode { get; } + + /// + /// 临时测试模式超时事件(到期时触发,应用应执行正常关闭流程)| Temporary test mode timeout event (fires when expired, app should perform graceful shutdown) + /// + event EventHandler TestModeTimeout; + + /// + /// 临时测试模式剩余5分钟警告事件 | Temporary test mode 5-minute warning event + /// + event EventHandler TestModeWarning5Min; + + /// + /// 临时测试模式剩余1分钟警告事件 | Temporary test mode 1-minute warning event + /// + event EventHandler TestModeWarning1Min; + + /// + /// 获取临时测试模式剩余时间 | Get remaining time in temporary test mode + /// + /// 剩余时间(秒),非测试模式返回 0 | Remaining time in seconds, 0 if not in test mode + int GetRemainingTestTime(); +} diff --git a/XP.Common/License/Native/NativeMethods.cs b/XP.Common/License/Native/NativeMethods.cs new file mode 100644 index 0000000..4ad22c4 --- /dev/null +++ b/XP.Common/License/Native/NativeMethods.cs @@ -0,0 +1,97 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; +using XP.Common.License.Enums; + +namespace XP.Common.License.Native +{ + /// + /// CLMS SDK 原生方法封装 | CLMS SDK native methods encapsulation + /// + internal static class NativeMethods + { + /// + /// 登录验证 | Login verification + /// + /// 验证字符串 | Verification string + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_Login", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_Login(StringBuilder str); + + /// + /// 退出登录 | Logout + /// + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_Logout", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_Logout(); + + /// + /// 检查许可范围 | Check license scope + /// + /// TRUE: 有许可 | TRUE: Has license; FALSE: 无许可 | FALSE: No license + [DllImport("MORCODE.dll", EntryPoint = "CLM_Login_Scope", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_Login_Scope(); + + /// + /// 检查模块是否授权 | Check if module is licensed + /// + /// 模块ID | Module ID + /// 类型(暂无定义)| Type (undefined) + /// TRUE: 模块可用 | TRUE: Module available; FALSE: 模块不可用 | FALSE: Module unavailable + [DllImport("MORCODE.dll", EntryPoint = "CLM_ModuleIsLicensed", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_ModuleIsLicensed(ref ushort mod, ref ushort type); + + /// + /// 获取保修到期日期 | Get warranty expiration date + /// + /// 月份 | Month + /// 日期 | Day + /// 年份 | Year + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetWarrantyExpiration", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_GetWarrantyExpiration(ref int mon, ref int day, ref int year); + + /// + /// 获取浮动许可的IP地址和端口 | Get floating license IP and port + /// + /// IP地址 | IP address + /// 端口 | Port + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetIP", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_GetIP(StringBuilder ip, StringBuilder port); + + /// + /// 获取错误信息 | Get error message + /// + /// 错误信息 | Error message + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetError", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_GetError(StringBuilder error); + + /// + /// 检查系统时间 | Check system time + /// + /// TRUE: 系统时间正常 | TRUE: System time normal; FALSE: 系统时间异常 | FALSE: System time anomaly + [DllImport("MORCODE.dll", EntryPoint = "CLM_CheckSystemTime", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_CheckSystemTime(); + + /// + /// 获取SmartService信息 | Get SmartService information + /// + /// 控制器ID | Controller ID + /// 用户名 | User name + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_SmartService", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_SmartService(StringBuilder ControllerId, StringBuilder UserName); + + /// + /// 获取SMA日期 | Get SMA date + /// + /// 月份 | Month + /// 日期 | Day + /// 年份 | Year + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetSmaDate", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_GetSmaDate(ref int mon, ref int day, ref int year); + } +} \ No newline at end of file diff --git a/XP.Common/Module/CommonModule.cs b/XP.Common/Module/CommonModule.cs index e15672d..e7b18f7 100644 --- a/XP.Common/Module/CommonModule.cs +++ b/XP.Common/Module/CommonModule.cs @@ -4,7 +4,8 @@ using Prism.Modularity; using XP.Common.Dump.Configs; using XP.Common.Dump.Implementations; using XP.Common.Dump.Interfaces; -using XP.Common.Helpers; +using XP.Common.License.Configs; +using XP.Common.License.Interfaces; using XP.Common.Localization.Configs; using XP.Common.Localization.Extensions; using XP.Common.Localization.Implementations; @@ -12,6 +13,8 @@ using XP.Common.Localization.Interfaces; using XP.Common.Logging.Interfaces; using XP.Common.PdfViewer.Implementations; using XP.Common.PdfViewer.Interfaces; +using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader; +using LicenseConfigLoader = XP.Common.License.Configs.ConfigLoader; namespace XP.Common.Module { @@ -65,7 +68,7 @@ namespace XP.Common.Module containerRegistry.RegisterSingleton(); // 注册 Dump 配置为单例(通过工厂方法加载)| Register Dump config as singleton (via factory method) - containerRegistry.RegisterSingleton(() => ConfigLoader.LoadDumpConfig()); + containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig()); // 注册 Dump 服务为单例 | Register Dump service as singleton containerRegistry.RegisterSingleton(); @@ -75,6 +78,12 @@ namespace XP.Common.Module // 注册 PDF 查看服务为单例 | Register PDF viewer service as singleton containerRegistry.RegisterSingleton(); + + // 注册授权配置为单例(通过工厂方法加载)| Register license config as singleton (via factory method) + containerRegistry.RegisterSingleton(() => LicenseConfigLoader.LoadLicenseConfig()); + + // 注册授权服务为单例 | Register license service as singleton + containerRegistry.RegisterSingleton(); } } } \ No newline at end of file diff --git a/XP.Common/ReleaseFiles/MORCODE.dll b/XP.Common/ReleaseFiles/MORCODE.dll new file mode 100644 index 0000000..d2a4075 Binary files /dev/null and b/XP.Common/ReleaseFiles/MORCODE.dll differ diff --git a/XP.Common/XP.Common.csproj b/XP.Common/XP.Common.csproj index 50c0aa6..90e15ca 100644 --- a/XP.Common/XP.Common.csproj +++ b/XP.Common/XP.Common.csproj @@ -62,4 +62,7 @@ Resources.resx + + + \ No newline at end of file diff --git a/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json b/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json index 6861e9d..8d2b10c 100644 --- a/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json +++ b/XP.Hardware.Detector/bin/Debug/net8.0-windows7.0/XP.Hardware.Detector.deps.json @@ -29,9 +29,6 @@ }, "Emgu.CV/4.10.0.5680": { "dependencies": { - "System.Drawing.Primitives": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", "System.Text.Json": "10.0.0" }, "runtime": { @@ -80,13 +77,9 @@ "Microsoft.Bcl.AsyncInterfaces": "1.1.1", "Microsoft.Bcl.HashCode": "1.1.0", "Microsoft.EntityFrameworkCore.Abstractions": "3.1.5", - "Microsoft.EntityFrameworkCore.Analyzers": "3.1.5", "Microsoft.Extensions.Caching.Memory": "3.1.5", "Microsoft.Extensions.DependencyInjection": "3.1.5", - "Microsoft.Extensions.Logging": "3.1.5", - "System.Collections.Immutable": "1.7.1", - "System.ComponentModel.Annotations": "4.7.0", - "System.Diagnostics.DiagnosticSource": "4.7.1" + "Microsoft.Extensions.Logging": "3.1.5" }, "runtime": { "lib/netstandard2.0/Microsoft.EntityFrameworkCore.dll": { @@ -103,7 +96,6 @@ } } }, - "Microsoft.EntityFrameworkCore.Analyzers/3.1.5": {}, "Microsoft.Extensions.Caching.Abstractions/3.1.5": { "dependencies": { "Microsoft.Extensions.Primitives": "10.0.0" @@ -237,8 +229,6 @@ } } }, - "Microsoft.NETCore.Platforms/2.0.0": {}, - "Microsoft.NETCore.Targets/1.1.3": {}, "Microsoft.OData.Client/7.8.3": { "dependencies": { "Microsoft.OData.Core": "7.8.3" @@ -281,14 +271,6 @@ } } }, - "Microsoft.Win32.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "Microsoft.Win32.SystemEvents/6.0.0": {}, "Microsoft.Xaml.Behaviors.Wpf/1.1.122": { "runtime": { "lib/net6.0-windows7.0/Microsoft.Xaml.Behaviors.dll": { @@ -297,54 +279,6 @@ } } }, - "NETStandard.Library/1.6.1": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.Win32.Primitives": "4.3.0", - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Console": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.Compression.ZipFile": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Net.Http": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Net.Sockets": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Timer": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - } - }, "Prism.Container.Abstractions/9.0.106": { "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.1" @@ -388,54 +322,6 @@ } } }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.native.System/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3" - } - }, - "runtime.native.System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3" - } - }, - "runtime.native.System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3" - } - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "dependencies": { - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" - } - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, "Serilog/4.3.1": { "runtime": { "lib/net8.0/Serilog.dll": { @@ -480,9 +366,6 @@ } }, "SharpDX/4.2.0": { - "dependencies": { - "NETStandard.Library": "1.6.1" - }, "runtime": { "lib/netstandard1.1/SharpDX.dll": { "assemblyVersion": "4.2.0.0", @@ -492,7 +375,6 @@ }, "SharpDX.D3DCompiler/4.2.0": { "dependencies": { - "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -504,7 +386,6 @@ }, "SharpDX.Direct2D1/4.2.0": { "dependencies": { - "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0", "SharpDX.DXGI": "4.2.0" }, @@ -517,7 +398,6 @@ }, "SharpDX.Direct3D10/4.2.0": { "dependencies": { - "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0", "SharpDX.D3DCompiler": "4.2.0", "SharpDX.DXGI": "4.2.0" @@ -531,7 +411,6 @@ }, "SharpDX.Direct3D9/4.2.0": { "dependencies": { - "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -543,7 +422,6 @@ }, "SharpDX.DXGI/4.2.0": { "dependencies": { - "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -555,7 +433,6 @@ }, "SharpDX.Mathematics/4.2.0": { "dependencies": { - "NETStandard.Library": "1.6.1", "SharpDX": "4.2.0" }, "runtime": { @@ -578,9 +455,6 @@ } }, "SQLitePCLRaw.core/2.1.11": { - "dependencies": { - "System.Memory": "4.5.3" - }, "runtime": { "lib/netstandard2.0/SQLitePCLRaw.core.dll": { "assemblyVersion": "2.1.11.2622", @@ -718,63 +592,7 @@ } } }, - "System.AppContext/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.1" - } - }, - "System.Buffers/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Threading": "4.3.0" - } - }, - "System.Collections/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Collections.Concurrent/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Collections.Immutable/1.7.1": {}, - "System.ComponentModel.Annotations/4.7.0": {}, - "System.Configuration.ConfigurationManager/6.0.0": { - "dependencies": { - "System.Security.Cryptography.ProtectedData": "6.0.0", - "System.Security.Permissions": "6.0.0" - } - }, - "System.Console/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.IO": "4.3.0", - "System.Runtime": "4.3.1", - "System.Text.Encoding": "4.3.0" - } - }, "System.Data.OleDb/6.0.0": { - "dependencies": { - "System.Configuration.ConfigurationManager": "6.0.0", - "System.Diagnostics.PerformanceCounter": "6.0.0" - }, "runtime": { "lib/net6.0/System.Data.OleDb.dll": { "assemblyVersion": "6.0.0.0", @@ -790,127 +608,6 @@ } } }, - "System.Diagnostics.Debug/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Diagnostics.DiagnosticSource/4.7.1": {}, - "System.Diagnostics.PerformanceCounter/6.0.0": { - "dependencies": { - "System.Configuration.ConfigurationManager": "6.0.0" - } - }, - "System.Diagnostics.Tools/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Diagnostics.Tracing/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Drawing.Common/6.0.0": { - "dependencies": { - "Microsoft.Win32.SystemEvents": "6.0.0" - } - }, - "System.Drawing.Primitives/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Globalization/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Globalization.Calendars/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Globalization": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Globalization.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.IO/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Compression/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Buffers": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.IO.Compression": "4.3.0" - } - }, - "System.IO.Compression.ZipFile/4.3.0": { - "dependencies": { - "System.Buffers": "4.3.0", - "System.IO": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.IO.FileSystem/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.IO": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Handles": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.1" - } - }, "System.IO.Pipelines/10.0.0": { "runtime": { "lib/net8.0/System.IO.Pipelines.dll": { @@ -919,100 +616,7 @@ } } }, - "System.Linq/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Linq.Expressions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Memory/4.5.3": {}, - "System.Net.Http/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.DiagnosticSource": "4.7.1", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Net.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Net.Sockets/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.IO": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Runtime": "4.3.1", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.ObjectModel/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Threading": "4.3.0" - } - }, "System.Private.ServiceModel/4.7.0": { - "dependencies": { - "System.Reflection.DispatchProxy": "4.5.0", - "System.Security.Cryptography.Xml": "4.5.0", - "System.Security.Principal.Windows": "4.5.0" - }, "runtime": { "lib/netstandard2.0/System.Private.ServiceModel.dll": { "assemblyVersion": "4.7.0.0", @@ -1020,252 +624,6 @@ } } }, - "System.Reflection/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Reflection.DispatchProxy/4.5.0": {}, - "System.Reflection.Emit/4.3.0": { - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Reflection.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Reflection.Primitives/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Reflection.TypeExtensions/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Resources.ResourceManager/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.1" - } - }, - "System.Runtime/4.3.1": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3" - } - }, - "System.Runtime.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Runtime.Handles/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Runtime.InteropServices/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Runtime.Numerics/4.3.0": { - "dependencies": { - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Security.AccessControl/6.0.0": {}, - "System.Security.Cryptography.Algorithms/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.Apple": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Cng/4.5.0": {}, - "System.Security.Cryptography.Csp/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Pkcs/4.5.0": { - "dependencies": { - "System.Security.Cryptography.Cng": "4.5.0" - } - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Security.Cryptography.ProtectedData/6.0.0": {}, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Cng": "4.5.0", - "System.Security.Cryptography.Csp": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Xml/4.5.0": { - "dependencies": { - "System.Security.Cryptography.Pkcs": "4.5.0", - "System.Security.Permissions": "6.0.0" - } - }, - "System.Security.Permissions/6.0.0": { - "dependencies": { - "System.Security.AccessControl": "6.0.0", - "System.Windows.Extensions": "6.0.0" - } - }, - "System.Security.Principal.Windows/4.5.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0" - } - }, "System.ServiceModel.Http/4.7.0": { "dependencies": { "System.Private.ServiceModel": "4.7.0", @@ -1293,21 +651,6 @@ } } }, - "System.Text.Encoding/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Text.Encoding.Extensions/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1", - "System.Text.Encoding": "4.3.0" - } - }, "System.Text.Encodings.Web/10.0.0": { "runtime": { "lib/net8.0/System.Text.Encodings.Web.dll": { @@ -1336,78 +679,6 @@ } } }, - "System.Text.RegularExpressions/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.1" - } - }, - "System.Threading/4.3.0": { - "dependencies": { - "System.Runtime": "4.3.1", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.1", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Timer/4.3.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "Microsoft.NETCore.Targets": "1.1.3", - "System.Runtime": "4.3.1" - } - }, - "System.Windows.Extensions/6.0.0": { - "dependencies": { - "System.Drawing.Common": "6.0.0" - } - }, - "System.Xml.ReaderWriter/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" - } - }, - "System.Xml.XDocument/4.3.0": { - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.1", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, "Telerik.UI.for.Wpf.NetCore.Xaml/2024.1.408": { "dependencies": { "Microsoft.EntityFrameworkCore": "3.1.5", @@ -1419,7 +690,6 @@ "SharpDX.Direct3D9": "4.2.0", "SharpDX.Mathematics": "4.2.0", "System.Data.OleDb": "6.0.0", - "System.Drawing.Common": "6.0.0", "System.ServiceModel.Http": "4.7.0" }, "runtime": { @@ -1779,13 +1049,6 @@ "path": "microsoft.entityframeworkcore.abstractions/3.1.5", "hashPath": "microsoft.entityframeworkcore.abstractions.3.1.5.nupkg.sha512" }, - "Microsoft.EntityFrameworkCore.Analyzers/3.1.5": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NhxlI6Qj/QUt79ApeBrpKo+a5TGt/UCddxd9rLHD7Zd6yLyfkDOMiyu4oPqhnMhpqmzo/gd79tW7BMwIxgEZCw==", - "path": "microsoft.entityframeworkcore.analyzers/3.1.5", - "hashPath": "microsoft.entityframeworkcore.analyzers.3.1.5.nupkg.sha512" - }, "Microsoft.Extensions.Caching.Abstractions/3.1.5": { "type": "package", "serviceable": true, @@ -1870,20 +1133,6 @@ "path": "microsoft.extensions.primitives/10.0.0", "hashPath": "microsoft.extensions.primitives.10.0.0.nupkg.sha512" }, - "Microsoft.NETCore.Platforms/2.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VdLJOCXhZaEMY7Hm2GKiULmn7IEPFE4XC5LPSfBVCUIA8YLZVh846gtfBJalsPQF2PlzdD7ecX7DZEulJ402ZQ==", - "path": "microsoft.netcore.platforms/2.0.0", - "hashPath": "microsoft.netcore.platforms.2.0.0.nupkg.sha512" - }, - "Microsoft.NETCore.Targets/1.1.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==", - "path": "microsoft.netcore.targets/1.1.3", - "hashPath": "microsoft.netcore.targets.1.1.3.nupkg.sha512" - }, "Microsoft.OData.Client/7.8.3": { "type": "package", "serviceable": true, @@ -1912,20 +1161,6 @@ "path": "microsoft.spatial/7.8.3", "hashPath": "microsoft.spatial.7.8.3.nupkg.sha512" }, - "Microsoft.Win32.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", - "path": "microsoft.win32.primitives/4.3.0", - "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" - }, - "Microsoft.Win32.SystemEvents/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==", - "path": "microsoft.win32.systemevents/6.0.0", - "hashPath": "microsoft.win32.systemevents.6.0.0.nupkg.sha512" - }, "Microsoft.Xaml.Behaviors.Wpf/1.1.122": { "type": "package", "serviceable": true, @@ -1933,13 +1168,6 @@ "path": "microsoft.xaml.behaviors.wpf/1.1.122", "hashPath": "microsoft.xaml.behaviors.wpf.1.1.122.nupkg.sha512" }, - "NETStandard.Library/1.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", - "path": "netstandard.library/1.6.1", - "hashPath": "netstandard.library.1.6.1.nupkg.sha512" - }, "Prism.Container.Abstractions/9.0.106": { "type": "package", "serviceable": true, @@ -1968,118 +1196,6 @@ "path": "prism.wpf/9.0.537", "hashPath": "prism.wpf.9.0.537.nupkg.sha512" }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==", - "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==", - "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==", - "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.native.System/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", - "path": "runtime.native.system/4.3.0", - "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" - }, - "runtime.native.System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", - "path": "runtime.native.system.io.compression/4.3.0", - "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", - "path": "runtime.native.system.net.http/4.3.0", - "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", - "path": "runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", - "path": "runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==", - "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==", - "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", - "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==", - "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==", - "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==", - "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, "Serilog/4.3.1": { "type": "package", "serviceable": true, @@ -2185,62 +1301,6 @@ "path": "sqlitepclraw.provider.e_sqlite3/2.1.11", "hashPath": "sqlitepclraw.provider.e_sqlite3.2.1.11.nupkg.sha512" }, - "System.AppContext/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", - "path": "system.appcontext/4.3.0", - "hashPath": "system.appcontext.4.3.0.nupkg.sha512" - }, - "System.Buffers/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", - "path": "system.buffers/4.3.0", - "hashPath": "system.buffers.4.3.0.nupkg.sha512" - }, - "System.Collections/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", - "path": "system.collections/4.3.0", - "hashPath": "system.collections.4.3.0.nupkg.sha512" - }, - "System.Collections.Concurrent/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", - "path": "system.collections.concurrent/4.3.0", - "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" - }, - "System.Collections.Immutable/1.7.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==", - "path": "system.collections.immutable/1.7.1", - "hashPath": "system.collections.immutable.1.7.1.nupkg.sha512" - }, - "System.ComponentModel.Annotations/4.7.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-0YFqjhp/mYkDGpU0Ye1GjE53HMp9UVfGN7seGpAMttAC0C40v5gw598jCgpbBLMmCo0E5YRLBv5Z2doypO49ZQ==", - "path": "system.componentmodel.annotations/4.7.0", - "hashPath": "system.componentmodel.annotations.4.7.0.nupkg.sha512" - }, - "System.Configuration.ConfigurationManager/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", - "path": "system.configuration.configurationmanager/6.0.0", - "hashPath": "system.configuration.configurationmanager.6.0.0.nupkg.sha512" - }, - "System.Console/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", - "path": "system.console/4.3.0", - "hashPath": "system.console.4.3.0.nupkg.sha512" - }, "System.Data.OleDb/6.0.0": { "type": "package", "serviceable": true, @@ -2248,111 +1308,6 @@ "path": "system.data.oledb/6.0.0", "hashPath": "system.data.oledb.6.0.0.nupkg.sha512" }, - "System.Diagnostics.Debug/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", - "path": "system.diagnostics.debug/4.3.0", - "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.DiagnosticSource/4.7.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-j81Lovt90PDAq8kLpaJfJKV/rWdWuEk6jfV+MBkee33vzYLEUsy4gXK8laa9V2nZlLM9VM9yA/OOQxxPEJKAMw==", - "path": "system.diagnostics.diagnosticsource/4.7.1", - "hashPath": "system.diagnostics.diagnosticsource.4.7.1.nupkg.sha512" - }, - "System.Diagnostics.PerformanceCounter/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-gbeE5tNp/oB7O8kTTLh3wPPJCxpNOphXPTWVs1BsYuFOYapFijWuh0LYw1qnDo4gwDUYPXOmpTIhvtxisGsYOQ==", - "path": "system.diagnostics.performancecounter/6.0.0", - "hashPath": "system.diagnostics.performancecounter.6.0.0.nupkg.sha512" - }, - "System.Diagnostics.Tools/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", - "path": "system.diagnostics.tools/4.3.0", - "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" - }, - "System.Diagnostics.Tracing/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", - "path": "system.diagnostics.tracing/4.3.0", - "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" - }, - "System.Drawing.Common/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==", - "path": "system.drawing.common/6.0.0", - "hashPath": "system.drawing.common.6.0.0.nupkg.sha512" - }, - "System.Drawing.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-1QU/c35gwdhvj77fkScXQQbjiVAqIL3fEYn/19NE0CV/ic5TN5PyWAft8HsrbRd4SBLEoErNCkWSzMDc0MmbRw==", - "path": "system.drawing.primitives/4.3.0", - "hashPath": "system.drawing.primitives.4.3.0.nupkg.sha512" - }, - "System.Globalization/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "path": "system.globalization/4.3.0", - "hashPath": "system.globalization.4.3.0.nupkg.sha512" - }, - "System.Globalization.Calendars/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", - "path": "system.globalization.calendars/4.3.0", - "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" - }, - "System.Globalization.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", - "path": "system.globalization.extensions/4.3.0", - "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" - }, - "System.IO/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "path": "system.io/4.3.0", - "hashPath": "system.io.4.3.0.nupkg.sha512" - }, - "System.IO.Compression/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", - "path": "system.io.compression/4.3.0", - "hashPath": "system.io.compression.4.3.0.nupkg.sha512" - }, - "System.IO.Compression.ZipFile/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", - "path": "system.io.compression.zipfile/4.3.0", - "hashPath": "system.io.compression.zipfile.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", - "path": "system.io.filesystem/4.3.0", - "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", - "path": "system.io.filesystem.primitives/4.3.0", - "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" - }, "System.IO.Pipelines/10.0.0": { "type": "package", "serviceable": true, @@ -2360,55 +1315,6 @@ "path": "system.io.pipelines/10.0.0", "hashPath": "system.io.pipelines.10.0.0.nupkg.sha512" }, - "System.Linq/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", - "path": "system.linq/4.3.0", - "hashPath": "system.linq.4.3.0.nupkg.sha512" - }, - "System.Linq.Expressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", - "path": "system.linq.expressions/4.3.0", - "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" - }, - "System.Memory/4.5.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", - "path": "system.memory/4.5.3", - "hashPath": "system.memory.4.5.3.nupkg.sha512" - }, - "System.Net.Http/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", - "path": "system.net.http/4.3.0", - "hashPath": "system.net.http.4.3.0.nupkg.sha512" - }, - "System.Net.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", - "path": "system.net.primitives/4.3.0", - "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" - }, - "System.Net.Sockets/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", - "path": "system.net.sockets/4.3.0", - "hashPath": "system.net.sockets.4.3.0.nupkg.sha512" - }, - "System.ObjectModel/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", - "path": "system.objectmodel/4.3.0", - "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" - }, "System.Private.ServiceModel/4.7.0": { "type": "package", "serviceable": true, @@ -2416,202 +1322,6 @@ "path": "system.private.servicemodel/4.7.0", "hashPath": "system.private.servicemodel.4.7.0.nupkg.sha512" }, - "System.Reflection/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "path": "system.reflection/4.3.0", - "hashPath": "system.reflection.4.3.0.nupkg.sha512" - }, - "System.Reflection.DispatchProxy/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-+UW1hq11TNSeb+16rIk8hRQ02o339NFyzMc4ma/FqmxBzM30l1c2IherBB4ld1MNcenS48fz8tbt50OW4rVULA==", - "path": "system.reflection.dispatchproxy/4.5.0", - "hashPath": "system.reflection.dispatchproxy.4.5.0.nupkg.sha512" - }, - "System.Reflection.Emit/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", - "path": "system.reflection.emit/4.3.0", - "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", - "path": "system.reflection.emit.ilgeneration/4.3.0", - "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", - "path": "system.reflection.emit.lightweight/4.3.0", - "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" - }, - "System.Reflection.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", - "path": "system.reflection.extensions/4.3.0", - "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" - }, - "System.Reflection.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "path": "system.reflection.primitives/4.3.0", - "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" - }, - "System.Reflection.TypeExtensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", - "path": "system.reflection.typeextensions/4.3.0", - "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" - }, - "System.Resources.ResourceManager/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "path": "system.resources.resourcemanager/4.3.0", - "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" - }, - "System.Runtime/4.3.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-abhfv1dTK6NXOmu4bgHIONxHyEqFjW8HwXPmpY9gmll+ix9UNo4XDcmzJn6oLooftxNssVHdJC1pGT9jkSynQg==", - "path": "system.runtime/4.3.1", - "hashPath": "system.runtime.4.3.1.nupkg.sha512" - }, - "System.Runtime.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "path": "system.runtime.extensions/4.3.0", - "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" - }, - "System.Runtime.Handles/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", - "path": "system.runtime.handles/4.3.0", - "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", - "path": "system.runtime.interopservices/4.3.0", - "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", - "path": "system.runtime.interopservices.runtimeinformation/4.3.0", - "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" - }, - "System.Runtime.Numerics/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", - "path": "system.runtime.numerics/4.3.0", - "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" - }, - "System.Security.AccessControl/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==", - "path": "system.security.accesscontrol/6.0.0", - "hashPath": "system.security.accesscontrol.6.0.0.nupkg.sha512" - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", - "path": "system.security.cryptography.algorithms/4.3.0", - "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Cng/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A==", - "path": "system.security.cryptography.cng/4.5.0", - "hashPath": "system.security.cryptography.cng.4.5.0.nupkg.sha512" - }, - "System.Security.Cryptography.Csp/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", - "path": "system.security.cryptography.csp/4.3.0", - "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", - "path": "system.security.cryptography.encoding/4.3.0", - "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", - "path": "system.security.cryptography.openssl/4.3.0", - "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Pkcs/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TGQX51gxpY3K3I6LJlE2LAftVlIMqJf0cBGhz68Y89jjk3LJCB6SrwiD+YN1fkqemBvWGs+GjyMJukl6d6goyQ==", - "path": "system.security.cryptography.pkcs/4.5.0", - "hashPath": "system.security.cryptography.pkcs.4.5.0.nupkg.sha512" - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", - "path": "system.security.cryptography.primitives/4.3.0", - "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.ProtectedData/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==", - "path": "system.security.cryptography.protecteddata/6.0.0", - "hashPath": "system.security.cryptography.protecteddata.6.0.0.nupkg.sha512" - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", - "path": "system.security.cryptography.x509certificates/4.3.0", - "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" - }, - "System.Security.Cryptography.Xml/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-i2Jn6rGXR63J0zIklImGRkDIJL4b1NfPSEbIVHBlqoIb12lfXIigCbDRpDmIEzwSo/v1U5y/rYJdzZYSyCWxvg==", - "path": "system.security.cryptography.xml/4.5.0", - "hashPath": "system.security.cryptography.xml.4.5.0.nupkg.sha512" - }, - "System.Security.Permissions/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", - "path": "system.security.permissions/6.0.0", - "hashPath": "system.security.permissions.6.0.0.nupkg.sha512" - }, - "System.Security.Principal.Windows/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==", - "path": "system.security.principal.windows/4.5.0", - "hashPath": "system.security.principal.windows.4.5.0.nupkg.sha512" - }, "System.ServiceModel.Http/4.7.0": { "type": "package", "serviceable": true, @@ -2626,20 +1336,6 @@ "path": "system.servicemodel.primitives/4.7.0", "hashPath": "system.servicemodel.primitives.4.7.0.nupkg.sha512" }, - "System.Text.Encoding/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "path": "system.text.encoding/4.3.0", - "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" - }, - "System.Text.Encoding.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", - "path": "system.text.encoding.extensions/4.3.0", - "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" - }, "System.Text.Encodings.Web/10.0.0": { "type": "package", "serviceable": true, @@ -2654,62 +1350,6 @@ "path": "system.text.json/10.0.0", "hashPath": "system.text.json.10.0.0.nupkg.sha512" }, - "System.Text.RegularExpressions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", - "path": "system.text.regularexpressions/4.3.0", - "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" - }, - "System.Threading/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", - "path": "system.threading/4.3.0", - "hashPath": "system.threading.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "path": "system.threading.tasks/4.3.0", - "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", - "path": "system.threading.tasks.extensions/4.3.0", - "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" - }, - "System.Threading.Timer/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", - "path": "system.threading.timer/4.3.0", - "hashPath": "system.threading.timer.4.3.0.nupkg.sha512" - }, - "System.Windows.Extensions/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", - "path": "system.windows.extensions/6.0.0", - "hashPath": "system.windows.extensions.6.0.0.nupkg.sha512" - }, - "System.Xml.ReaderWriter/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", - "path": "system.xml.readerwriter/4.3.0", - "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" - }, - "System.Xml.XDocument/4.3.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", - "path": "system.xml.xdocument/4.3.0", - "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" - }, "Telerik.UI.for.Wpf.NetCore.Xaml/2024.1.408": { "type": "package", "serviceable": true, diff --git a/XP.Hardware.PLC.Sentry/App.xaml.cs b/XP.Hardware.PLC.Sentry/App.xaml.cs index 7cc5f17..8f99954 100644 --- a/XP.Hardware.PLC.Sentry/App.xaml.cs +++ b/XP.Hardware.PLC.Sentry/App.xaml.cs @@ -5,7 +5,7 @@ using Serilog; using System; using System.Resources; using System.Windows; -using XP.Common.Configs; +using XP.Common.Logging.Configs; using XP.Common.Localization; using XP.Common.Localization.Interfaces; using XP.Common.Logging; @@ -118,7 +118,7 @@ namespace XP.Hardware.PLC.Sentry }; // 加载并初始化 Serilog | Load and initialize Serilog - SerilogConfig serilogConfig = XP.Common.Helpers.ConfigLoader.LoadSerilogConfig(); + SerilogConfig serilogConfig = XP.Common.Logging.Configs.ConfigLoader.LoadSerilogConfig(); SerilogInitializer.Initialize(serilogConfig); _logger.Information("PLC Sentry Monitor 启动开始 | PLC Sentry Monitor startup started"); diff --git a/XP.Scan/App.xaml.cs b/XP.Scan/App.xaml.cs index 8b122d6..72482fd 100644 --- a/XP.Scan/App.xaml.cs +++ b/XP.Scan/App.xaml.cs @@ -2,11 +2,11 @@ using System; using System.Windows; using Prism.Container.DryIoc; using Prism.Ioc; -using XP.Common.Configs; using XP.Common.Dump.Configs; using XP.Common.Dump.Implementations; using XP.Common.Dump.Interfaces; -using XP.Common.Helpers; +using XP.Common.Logging.Configs; +using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader; using XP.Common.Localization.Configs; using XP.Common.Localization.Extensions; using XP.Common.Localization; @@ -71,7 +71,7 @@ namespace XP.Scan containerRegistry.RegisterSingleton(); // Dump 服务 - containerRegistry.RegisterSingleton(() => ConfigLoader.LoadDumpConfig()); + containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig()); containerRegistry.RegisterSingleton(); // 注册 XPScanView 用于区域导航 diff --git a/XplorePlane.Tests/Services/InspectionResultStoreTests.cs b/XplorePlane.Tests/Services/InspectionResultStoreTests.cs index 21ffa5e..c758244 100644 --- a/XplorePlane.Tests/Services/InspectionResultStoreTests.cs +++ b/XplorePlane.Tests/Services/InspectionResultStoreTests.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq; using System.Text.Json; using System.Threading.Tasks; -using XP.Common.Configs; +using XP.Common.Database.Configs; using XP.Common.Database.Implementations; using XP.Common.Database.Interfaces; using XP.Common.Logging.Interfaces; diff --git a/XplorePlane/App.config b/XplorePlane/App.config index acb634d..d058de3 100644 --- a/XplorePlane/App.config +++ b/XplorePlane/App.config @@ -11,6 +11,11 @@ + + + + + diff --git a/XplorePlane/App.xaml.cs b/XplorePlane/App.xaml.cs index e31ac2b..ee882f9 100644 --- a/XplorePlane/App.xaml.cs +++ b/XplorePlane/App.xaml.cs @@ -10,14 +10,18 @@ using System.Threading; using System.Windows; using Telerik.Windows.Controls; using XP.Camera; -using XP.Common.Configs; +using XP.Common.Database.Configs; using XP.Common.Database.Implementations; using XP.Common.Database.Interfaces; using XP.Common.Dump.Configs; using XP.Common.Dump.Implementations; using XP.Common.Dump.Interfaces; using XP.Common.GeneralForm.Views; -using XP.Common.Helpers; +using XP.Common.Logging.Configs; +using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader; +using LoggingConfigLoader = XP.Common.Logging.Configs.ConfigLoader; +using DatabaseConfigLoader = XP.Common.Database.Configs.ConfigLoader; +using XP.Common.License.Interfaces; using XP.Common.Localization.Configs; using XP.Common.Localization.Extensions; using XP.Common.Localization.Implementations; @@ -110,7 +114,7 @@ namespace XplorePlane private void ConfigureLogging() { // 加载 Serilog 配置 | Load Serilog configuration - SerilogConfig serilogConfig = ConfigLoader.LoadSerilogConfig(); + SerilogConfig serilogConfig = LoggingConfigLoader.LoadSerilogConfig(); // 初始化 Serilog(全局唯一)| Initialize Serilog (global singleton) SerilogInitializer.Initialize(serilogConfig); @@ -315,6 +319,13 @@ namespace XplorePlane _modulesInitialized = true; } + // 执行授权检查 | Perform license authorization check + if (!PerformLicenseCheck()) + { + Application.Current.Shutdown(); + return null; + } + var shell = Container.Resolve(); // 主窗口加载完成后再连接相机,确保所有模块和原生 DLL 已完成初始化 @@ -353,6 +364,103 @@ namespace XplorePlane return shell; } + /// + /// 执行授权检查,授权失败时显示错误消息 | Perform license check, show error message on failure + /// + /// 授权是否成功 | Whether authorization succeeded + private bool PerformLicenseCheck() + { + try + { + var licenseService = Container.Resolve(); + var result = licenseService.CheckAuthorization(); + + if (!result.IsAuthorized) + { + Log.Error("授权检查失败 | Authorization check failed: {Message}", result.Message); + MessageBox.Show( + result.Message, + "授权失败 | Authorization Failed", + MessageBoxButton.OK, + MessageBoxImage.Error); + return false; + } + + // 订阅临时测试模式事件 | Subscribe to temporary test mode events + licenseService.TestModeWarning5Min += OnTestModeWarning5Min; + licenseService.TestModeWarning1Min += OnTestModeWarning1Min; + licenseService.TestModeTimeout += OnTestModeTimeout; + + // 临时测试模式启动提示 | Temporary test mode startup notification + if (licenseService.LicenseMode == XP.Common.License.Enums.LicenseMode.TemporaryTest) + { + MessageBox.Show( + "当前为临时测试模式,软件将在15分钟后自动关闭。\nCurrently in temporary test mode, the software will automatically shut down after 15 minutes.", + "临时测试模式 | Temporary Test Mode", + MessageBoxButton.OK, + MessageBoxImage.Information); + } + + Log.Information("授权检查通过 | Authorization check passed, Mode={Mode}", licenseService.LicenseMode); + return true; + } + catch (Exception ex) + { + Log.Error(ex, "授权检查过程中发生异常 | Exception during authorization check"); + MessageBox.Show( + $"授权检查异常 | Authorization check exception: {ex.Message}", + "授权失败 | Authorization Failed", + MessageBoxButton.OK, + MessageBoxImage.Error); + return false; + } + } + + /// + /// 处理临时测试模式剩余5分钟警告 | Handle temporary test mode 5-minute warning + /// + private void OnTestModeWarning5Min(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Log.Warning("临时测试模式剩余5分钟 | Temporary test mode: 5 minutes remaining"); + MessageBox.Show( + "临时测试模式将在5分钟后到期,请尽快保存您的工作。\nTemporary test mode will expire in 5 minutes, please save your work.", + "测试模式提醒 | Test Mode Reminder", + MessageBoxButton.OK, + MessageBoxImage.Information); + }); + } + + /// + /// 处理临时测试模式剩余1分钟警告 | Handle temporary test mode 1-minute warning + /// + private void OnTestModeWarning1Min(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Log.Warning("临时测试模式剩余1分钟 | Temporary test mode: 1 minute remaining"); + MessageBox.Show( + "临时测试模式将在1分钟后到期,软件即将关闭,请立即保存您的工作。\nTemporary test mode will expire in 1 minute, the software will shut down soon. Please save your work immediately.", + "测试模式即将到期 | Test Mode Expiring", + MessageBoxButton.OK, + MessageBoxImage.Warning); + }); + } + + /// + /// 处理临时测试模式超时事件(执行正常关闭流程)| Handle temporary test mode timeout event (perform graceful shutdown) + /// + private void OnTestModeTimeout(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Log.Warning("临时测试模式已超时,执行正常关闭流程 | Temporary test mode timed out, performing graceful shutdown"); + // 使用正常关闭流程,确保资源正确释放 | Use graceful shutdown to ensure proper resource release + Application.Current.MainWindow?.Close(); + }); + } + /// /// 在主线程上检索并连接导航相机。 /// pylon SDK 要求在主线程(STA)上操作,不能放到后台线程。 @@ -428,14 +536,14 @@ namespace XplorePlane containerRegistry.Register(); // 注册 SQLite 配置和数据库上下文(FilamentLifetimeService 依赖) - var sqliteConfig = XP.Common.Helpers.ConfigLoader.LoadSqliteConfig(); + var sqliteConfig = DatabaseConfigLoader.LoadSqliteConfig(); containerRegistry.RegisterInstance(sqliteConfig); containerRegistry.RegisterSingleton(); // 注册通用模块的服务(本地化、Dump) containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(() => XP.Common.Helpers.ConfigLoader.LoadDumpConfig()); + containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig()); containerRegistry.RegisterSingleton(); // ── CNC / 矩阵编排 / 测量数据服务(单例)──