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 / 矩阵编排 / 测量数据服务(单例)──