Ver Fonte

1.增加一些硬件信息获取
2.优化excel导出

懒得勤快 há 3 anos atrás
pai
commit
60157a576e

+ 35 - 0
Masuit.Tools.Abstractions/Hardware/BiosInfo.cs

@@ -0,0 +1,35 @@
+namespace Masuit.Tools.Hardware;
+
+/// <summary>
+/// BIOS信息
+/// </summary>
+public class BiosInfo
+{
+    private static readonly BiosInfo _local = SystemInfo.GetBiosInfo();
+
+    /// <summary>
+    /// 本地实例
+    /// </summary>
+    public static BiosInfo Local => _local;
+
+    /// <summary>
+    /// ID
+    /// </summary>
+    public string ID { get; set; }
+
+    /// <summary>
+    /// 序列号
+    /// </summary>
+    public string SerialNumber { get; set; }
+    
+    /// <summary>
+    /// 型号
+    /// </summary>
+    public string Model { get; set; }
+    
+    /// <summary>
+    /// 制造商
+    /// </summary>
+    public string Manufacturer { get; set; }
+
+}

+ 21 - 8
Masuit.Tools.Abstractions/Hardware/CpuInfo.cs

@@ -1,10 +1,29 @@
-namespace Masuit.Tools.Hardware
+using System.Collections.Generic;
+
+namespace Masuit.Tools.Hardware
 {
     /// <summary>
     /// CPU模型
     /// </summary>
     public class CpuInfo
     {
+        private static readonly List<CpuInfo> _locals = SystemInfo.GetCpuInfo();
+
+        /// <summary>
+        /// 本地实例
+        /// </summary>
+        public static List<CpuInfo> Locals => _locals;
+
+        /// <summary>
+        /// 获取CPU核心数
+        /// </summary>
+        public static int ProcessorCount => SystemInfo.ProcessorCount;
+
+        /// <summary>
+        /// 获取CPU占用率 %
+        /// </summary>
+        public static float CpuLoad => SystemInfo.CpuLoad;
+
         /// <summary>
         /// 设备ID
         /// </summary>
@@ -40,11 +59,6 @@
         /// </summary>
         public int NumberOfLogicalProcessors { get; set; }
 
-        /// <summary>
-        /// CPU使用率
-        /// </summary>
-        public double CpuLoad { get; set; }
-
         /// <summary>
         /// CPU位宽
         /// </summary>
@@ -53,12 +67,11 @@
         /// <summary>
         /// 核心温度
         /// </summary>
-        public double Temperature { get; set; }
+        public double Temperature => SystemInfo.GetCPUTemperature();
 
         /// <summary>
         /// 序列号
         /// </summary>
         public string SerialNumber { get; set; }
     }
-#pragma warning restore 1591
 }

+ 28 - 7
Masuit.Tools.Abstractions/Hardware/DiskInfo.cs

@@ -1,9 +1,30 @@
-namespace Masuit.Tools.Hardware
+using System.Collections.Generic;
+
+namespace Masuit.Tools.Hardware;
+
+/// <summary>
+/// 磁盘信息
+/// </summary>
+public class DiskInfo
 {
-    public class DiskInfo
-    {
-        public string SerialNumber { get; set; }
-        public string Model { get; set; }
-        public float Total { get; set; }
-    }
+    private static readonly List<DiskInfo> _locals = SystemInfo.GetDiskInfo();
+
+    /// <summary>
+    /// 本地实例
+    /// </summary>
+    public static List<DiskInfo> Locals => _locals;
+    /// <summary>
+    /// 序列号
+    /// </summary>
+    public string SerialNumber { get; set; }
+
+    /// <summary>
+    /// 型号
+    /// </summary>
+    public string Model { get; set; }
+
+    /// <summary>
+    /// 总容量
+    /// </summary>
+    public float Total { get; set; }
 }

+ 2 - 0
Masuit.Tools.Abstractions/Hardware/RamInfo.cs

@@ -5,6 +5,8 @@
     /// </summary>
     public class RamInfo
     {
+        public static RamInfo Local => SystemInfo.GetRamInfo();
+
         /// <summary>
         /// 可用物理内存
         /// </summary>

+ 298 - 204
Masuit.Tools.Abstractions/Hardware/SystemInfo.cs

@@ -36,6 +36,7 @@ namespace Masuit.Tools.Hardware
         private static readonly string[] InstanceNames;
         private static readonly PerformanceCounter[] NetRecvCounters;
         private static readonly PerformanceCounter[] NetSentCounters;
+        private static readonly Dictionary<string, dynamic> _cache = new();
 
         #endregion 字段
 
@@ -94,17 +95,13 @@ namespace Masuit.Tools.Hardware
 
         private static bool CompactFormat { get; set; }
 
-        #region CPU核心
+        #region CPU相关
 
         /// <summary>
         /// 获取CPU核心数
         /// </summary>
         public static int ProcessorCount { get; }
 
-        #endregion CPU核心
-
-        #region CPU占用率
-
         /// <summary>
         /// 获取CPU占用率 %
         /// </summary>
@@ -128,91 +125,44 @@ namespace Masuit.Tools.Hardware
             return cpuUsedMs / (Environment.ProcessorCount * totalMsPassed) * 100;
         }
 
-        #endregion CPU占用率
-
-        #region 可用内存
-
         /// <summary>
-        /// 获取可用内存
+        /// WMI接口获取CPU使用率
         /// </summary>
-        public static long MemoryAvailable
+        /// <returns></returns>
+        public static string GetProcessorData()
         {
-            get
-            {
-                try
-                {
-                    using var mc = new ManagementClass("Win32_OperatingSystem");
-                    using var moc = mc.GetInstances();
-                    foreach (var mo in moc)
-                    {
-                        using (mo)
-                        {
-                            if (mo["FreePhysicalMemory"] != null)
-                            {
-                                return 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());
-                            }
-                        }
-                    }
-
-                    return 0;
-                }
-                catch (Exception)
-                {
-                    return 0;
-                }
-            }
+            var d = GetCounterValue(CpuCounter, "Processor", "% Processor Time", "_Total");
+            return CompactFormat ? (int)d + "%" : d.ToString("F") + "%";
         }
 
-        #endregion 可用内存
-
-        #region 物理内存
-
-        /// <summary>
-        /// 获取物理内存
-        /// </summary>
-        public static long PhysicalMemory { get; }
-
-        #endregion 物理内存
-
-        #region 查找所有应用程序标题
-
         /// <summary>
-        /// 查找所有应用程序标题
+        /// 获取CPU温度
         /// </summary>
-        /// <param name="handle">应用程序标题范型</param>
-        /// <returns>所有应用程序集合</returns>
-        public static ArrayList FindAllApps(int handle)
+        /// <returns>CPU温度</returns>
+        public static float GetCPUTemperature()
         {
-            var apps = new ArrayList();
-            int hwCurr = GetWindow(handle, GwHwndfirst);
-
-            while (hwCurr > 0)
+            try
             {
-                int IsTask = WsVisible | WsBorder;
-                int lngStyle = GetWindowLongA(hwCurr, GwlStyle);
-                bool taskWindow = (lngStyle & IsTask) == IsTask;
-                if (taskWindow)
+                using var mos = new ManagementObjectSearcher(@"root\WMI", "select * from MSAcpi_ThermalZoneTemperature");
+                using var moc = mos.Get();
+                foreach (var mo in moc)
                 {
-                    int length = GetWindowTextLength(new IntPtr(hwCurr));
-                    StringBuilder sb = new StringBuilder(2 * length + 1);
-                    GetWindowText(hwCurr, sb, sb.Capacity);
-                    string strTitle = sb.ToString();
-                    if (!string.IsNullOrEmpty(strTitle))
+                    using (mo)
                     {
-                        apps.Add(strTitle);
+                        //这就是CPU的温度了
+                        var temp = (float.Parse(mo.Properties["CurrentTemperature"].Value.ToString()) - 2732) / 10;
+                        return (float)Math.Round(temp, 2);
                     }
                 }
-
-                hwCurr = GetWindow(hwCurr, GwHwndnext);
+            }
+            catch (Exception)
+            {
+                return 0;
             }
 
-            return apps;
+            return 0;
         }
 
-        #endregion 查找所有应用程序标题
-
-        #region 获取CPU的数量
-
         /// <summary>
         /// 获取CPU的数量
         /// </summary>
@@ -221,9 +171,12 @@ namespace Masuit.Tools.Hardware
         {
             try
             {
-                using var m = new ManagementClass("Win32_Processor");
-                using var moc = m.GetInstances();
-                return moc.Count;
+                return _cache.GetOrAdd(nameof(GetCpuCount), () =>
+                {
+                    using var m = new ManagementClass("Win32_Processor");
+                    using var moc = m.GetInstances();
+                    return moc.Count;
+                });
             }
             catch (Exception)
             {
@@ -231,16 +184,12 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        #endregion 获取CPU的数量
-
-        #region 获取CPU信息
-
         private static readonly Lazy<List<ManagementBaseObject>> CpuObjects = new Lazy<List<ManagementBaseObject>>(() =>
-                             {
-                                 using var mos = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
-                                 using var moc = mos.Get();
-                                 return moc.AsParallel().Cast<ManagementBaseObject>().ToList();
-                             });
+        {
+            using var mos = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
+            using var moc = mos.Get();
+            return moc.AsParallel().Cast<ManagementBaseObject>().ToList();
+        });
 
         /// <summary>
         /// 获取CPU信息
@@ -252,7 +201,6 @@ namespace Masuit.Tools.Hardware
             {
                 return CpuObjects.Value.Select(mo => new CpuInfo
                 {
-                    CpuLoad = CpuLoad,
                     NumberOfLogicalProcessors = ProcessorCount,
                     CurrentClockSpeed = mo.Properties["CurrentClockSpeed"].Value.ToString(),
                     Manufacturer = mo.Properties["Manufacturer"].Value.ToString(),
@@ -261,8 +209,7 @@ namespace Masuit.Tools.Hardware
                     DataWidth = mo.Properties["DataWidth"].Value.ToString(),
                     SerialNumber = mo.Properties["ProcessorId"].Value.ToString(),
                     DeviceID = mo.Properties["DeviceID"].Value.ToString(),
-                    NumberOfCores = Convert.ToInt32(mo.Properties["NumberOfCores"].Value),
-                    Temperature = GetCPUTemperature()
+                    NumberOfCores = Convert.ToInt32(mo.Properties["NumberOfCores"].Value)
                 }).ToList();
             }
             catch (Exception)
@@ -271,77 +218,63 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        #endregion 获取CPU信息
-
-        #region 获取内存信息
-
-        /// <summary>
-        /// 获取内存信息
-        /// </summary>
-        /// <returns>内存信息</returns>
-        public static RamInfo GetRamInfo()
-        {
-            return new RamInfo
-            {
-                MemoryAvailable = GetFreePhysicalMemory(),
-                PhysicalMemory = GetTotalPhysicalMemory(),
-                TotalPageFile = GetTotalVirtualMemory(),
-                AvailablePageFile = GetTotalVirtualMemory() - GetUsedVirtualMemory(),
-                AvailableVirtual = 1 - GetUsageVirtualMemory(),
-                TotalVirtual = 1 - GetUsedPhysicalMemory()
-            };
-        }
-
-        #endregion 获取内存信息
+        #endregion CPU核心
 
-        #region 获取CPU温度
+        #region 内存相关
 
         /// <summary>
-        /// 获取CPU温度
+        /// 获取可用内存
         /// </summary>
-        /// <returns>CPU温度</returns>
-        public static float GetCPUTemperature()
+        public static long MemoryAvailable
         {
-            try
+            get
             {
-                using var mos = new ManagementObjectSearcher(@"root\WMI", "select * from MSAcpi_ThermalZoneTemperature");
-                using var moc = mos.Get();
-                foreach (var mo in moc)
+                try
                 {
-                    using (mo)
+                    using var mc = new ManagementClass("Win32_OperatingSystem");
+                    using var moc = mc.GetInstances();
+                    foreach (var mo in moc)
                     {
-                        //这就是CPU的温度了
-                        var temp = (float.Parse(mo.Properties["CurrentTemperature"].Value.ToString()) - 2732) / 10;
-                        return (float)Math.Round(temp, 2);
+                        using (mo)
+                        {
+                            if (mo["FreePhysicalMemory"] != null)
+                            {
+                                return 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());
+                            }
+                        }
                     }
+
+                    return 0;
+                }
+                catch (Exception)
+                {
+                    return 0;
                 }
             }
-            catch (Exception)
-            {
-                return 0;
-            }
-
-            return 0;
         }
 
-        #endregion 获取CPU温度
-
-        #region WMI接口获取CPU使用率
+        /// <summary>
+        /// 获取物理内存
+        /// </summary>
+        public static long PhysicalMemory { get; }
 
         /// <summary>
-        /// WMI接口获取CPU使用率
+        /// 获取内存信息
         /// </summary>
-        /// <returns></returns>
-        public static string GetProcessorData()
+        /// <returns>内存信息</returns>
+        public static RamInfo GetRamInfo()
         {
-            float d = GetCounterValue(CpuCounter, "Processor", "% Processor Time", "_Total");
-            return CompactFormat ? (int)d + "%" : d.ToString("F") + "%";
+            return new RamInfo
+            {
+                MemoryAvailable = GetFreePhysicalMemory(),
+                PhysicalMemory = GetTotalPhysicalMemory(),
+                TotalPageFile = GetTotalVirtualMemory(),
+                AvailablePageFile = GetTotalVirtualMemory() - GetUsedVirtualMemory(),
+                AvailableVirtual = 1 - GetUsageVirtualMemory(),
+                TotalVirtual = 1 - GetUsedPhysicalMemory()
+            };
         }
 
-        #endregion WMI接口获取CPU使用率
-
-        #region 获取虚拟内存使用率详情
-
         /// <summary>
         /// 获取虚拟内存使用率详情
         /// </summary>
@@ -383,10 +316,6 @@ namespace Masuit.Tools.Hardware
             return GetCounterValue(MemoryCounter, "Memory", "Commit Limit", null);
         }
 
-        #endregion 获取虚拟内存使用率详情
-
-        #region 获取物理内存使用率详情
-
         /// <summary>
         /// 获取物理内存使用率详情描述
         /// </summary>
@@ -409,8 +338,11 @@ namespace Masuit.Tools.Hardware
         /// <returns></returns>
         public static float GetTotalPhysicalMemory()
         {
-            string s = QueryComputerSystem("totalphysicalmemory");
-            return s.TryConvertTo<float>();
+            return _cache.GetOrAdd(nameof(GetTotalPhysicalMemory), () =>
+            {
+                var s = QueryComputerSystem("totalphysicalmemory");
+                return s.TryConvertTo<float>();
+            });
         }
 
         /// <summary>
@@ -431,9 +363,9 @@ namespace Masuit.Tools.Hardware
             return GetTotalPhysicalMemory() - GetFreePhysicalMemory();
         }
 
-        #endregion 获取物理内存使用率详情
+        #endregion 可用内存
 
-        #region 获取硬盘的读写速率
+        #region 硬盘相关
 
         /// <summary>
         /// 获取硬盘的读写速率
@@ -442,9 +374,47 @@ namespace Masuit.Tools.Hardware
         /// <returns></returns>
         public static float GetDiskData(DiskData dd) => dd == DiskData.Read ? GetCounterValue(DiskReadCounter, "PhysicalDisk", "Disk Read Bytes/sec", "_Total") : dd == DiskData.Write ? GetCounterValue(DiskWriteCounter, "PhysicalDisk", "Disk Write Bytes/sec", "_Total") : dd == DiskData.ReadAndWrite ? GetCounterValue(DiskReadCounter, "PhysicalDisk", "Disk Read Bytes/sec", "_Total") + GetCounterValue(DiskWriteCounter, "PhysicalDisk", "Disk Write Bytes/sec", "_Total") : 0;
 
-        #endregion 获取硬盘的读写速率
+        private static readonly List<DiskInfo> DiskInfos = new();
+
+        /// <summary>
+        /// 获取磁盘可用空间
+        /// </summary>
+        /// <returns></returns>
+        public static List<DiskInfo> GetDiskInfo()
+        {
+            try
+            {
+                if (DiskInfos.Count > 0)
+                {
+                    return DiskInfos;
+                }
+
+                using var mc = new ManagementClass("Win32_DiskDrive");
+                using var moc = mc.GetInstances();
+                foreach (var mo in moc)
+                {
+                    using (mo)
+                    {
+                        DiskInfos.Add(new DiskInfo()
+                        {
+                            Total = float.Parse(mo["Size"].ToString()),
+                            Model = mo["Model"].ToString(),
+                            SerialNumber = mo["SerialNumber"].ToString(),
+                        });
+                    }
+                }
 
-        #region 获取网络的传输速率
+                return DiskInfos;
+            }
+            catch (Exception)
+            {
+                return new List<DiskInfo>();
+            }
+        }
+
+        #endregion 硬盘相关
+
+        #region 网络相关
 
         /// <summary>
         /// 获取网络的传输速率
@@ -486,8 +456,6 @@ namespace Masuit.Tools.Hardware
             return d;
         }
 
-        #endregion 获取网络的传输速率
-
         /// <summary>
         /// 获取网卡硬件地址
         /// </summary>
@@ -497,21 +465,24 @@ namespace Masuit.Tools.Hardware
             //获取网卡硬件地址
             try
             {
-                IList<string> list = new List<string>();
-                using var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
-                using var moc = mc.GetInstances();
-                foreach (var mo in moc)
+                return _cache.GetOrAdd(nameof(GetMacAddress), () =>
                 {
-                    using (mo)
+                    IList<string> list = new List<string>();
+                    using var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
+                    using var moc = mc.GetInstances();
+                    foreach (var mo in moc)
                     {
-                        if ((bool)mo["IPEnabled"])
+                        using (mo)
                         {
-                            list.Add(mo["MacAddress"].ToString());
+                            if ((bool)mo["IPEnabled"])
+                            {
+                                list.Add(mo["MacAddress"].ToString());
+                            }
                         }
                     }
-                }
 
-                return list;
+                    return list;
+                });
             }
             catch (Exception)
             {
@@ -528,6 +499,36 @@ namespace Masuit.Tools.Hardware
             return GetLocalUsedIP(AddressFamily.InterNetwork);
         }
 
+        /// <summary>
+        /// 获取IP地址WMI
+        /// </summary>
+        /// <returns></returns>
+        public static string GetIPAddressWMI()
+        {
+            try
+            {
+                return _cache.GetOrAdd(nameof(GetIPAddressWMI), () =>
+                {
+                    using var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
+                    using var moc = mc.GetInstances();
+                    foreach (var mo in moc)
+                    {
+                        if ((bool)mo["IPEnabled"])
+                        {
+                            return ((string[])mo.Properties["IpAddress"].Value)[0];
+                        }
+                    }
+                    return "";
+                });
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+            }
+
+            return "";
+        }
+
         /// <summary>
         /// 获取当前使用的IP
         /// </summary>
@@ -547,29 +548,36 @@ namespace Masuit.Tools.Hardware
             return interfaces.SelectMany(n => n.GetIPProperties().UnicastAddresses).ToList();
         }
 
-        #region 将速度值格式化成字节单位
-
         /// <summary>
-        /// 将速度值格式化成字节单位
+        /// 获取网卡地址
         /// </summary>
-        /// <param name="bytes"></param>
         /// <returns></returns>
-        public static string FormatBytes(this double bytes)
+        public static string GetNetworkCardAddress()
         {
-            int unit = 0;
-            while (bytes > 1024)
+            try
             {
-                bytes /= 1024;
-                ++unit;
+                return _cache.GetOrAdd(nameof(GetNetworkCardAddress), () =>
+                {
+                    using var mos = new ManagementObjectSearcher("select * from Win32_NetworkAdapter where ((MACAddress Is Not NULL) and (Manufacturer <> 'Microsoft'))");
+                    using var moc = mos.Get();
+                    foreach (var mo in moc)
+                    {
+                        return mo["MACAddress"].ToString().Trim();
+                    }
+                    return "";
+                });
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
             }
 
-            string s = CompactFormat ? ((int)bytes).ToString() : bytes.ToString("F") + " ";
-            return s + (Unit)unit;
+            return "";
         }
 
-        #endregion 将速度值格式化成字节单位
+        #endregion 网络相关
 
-        #region 查询计算机系统信息
+        #region 系统相关
 
         /// <summary>
         /// 获取计算机开机时间
@@ -617,60 +625,144 @@ namespace Masuit.Tools.Hardware
             return string.Empty;
         }
 
-        #endregion 查询计算机系统信息
+        /// <summary>
+        /// 查找所有应用程序标题
+        /// </summary>
+        /// <param name="handle">应用程序标题范型</param>
+        /// <returns>所有应用程序集合</returns>
+        public static ArrayList FindAllApps(int handle)
+        {
+            var apps = new ArrayList();
+            int hwCurr = GetWindow(handle, GwHwndfirst);
+
+            while (hwCurr > 0)
+            {
+                int IsTask = WsVisible | WsBorder;
+                int lngStyle = GetWindowLongA(hwCurr, GwlStyle);
+                bool taskWindow = (lngStyle & IsTask) == IsTask;
+                if (taskWindow)
+                {
+                    int length = GetWindowTextLength(new IntPtr(hwCurr));
+                    StringBuilder sb = new StringBuilder(2 * length + 1);
+                    GetWindowText(hwCurr, sb, sb.Capacity);
+                    string strTitle = sb.ToString();
+                    if (!string.IsNullOrEmpty(strTitle))
+                    {
+                        apps.Add(strTitle);
+                    }
+                }
 
-        #region 获取环境变量
+                hwCurr = GetWindow(hwCurr, GwHwndnext);
+            }
+
+            return apps;
+        }
 
         /// <summary>
-        /// 获取环境变量
+        /// 操作系统类型
         /// </summary>
-        /// <param name="type">环境变量名</param>
         /// <returns></returns>
-        public static string QueryEnvironment(string type) => Environment.ExpandEnvironmentVariables(type);
+        public static string GetSystemType()
+        {
+            try
+            {
+                return _cache.GetOrAdd(nameof(GetSystemType), () =>
+                {
+                    using var mc = new ManagementClass("Win32_ComputerSystem");
+                    using var moc = mc.GetInstances();
+                    foreach (var mo in moc)
+                    {
+                        return mo["SystemType"].ToString().Trim();
+                    }
+                    return "";
+                });
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+            }
 
-        #endregion 获取环境变量
+            return "";
+        }
 
-        #region 获取磁盘空间
+        #endregion 系统相关
 
-        private static readonly List<DiskInfo> DiskInfos = new();
+        #region 主板相关
 
         /// <summary>
-        /// 获取磁盘可用空间
+        /// 获取主板序列号
         /// </summary>
         /// <returns></returns>
-        public static List<DiskInfo> GetDiskInfo()
+        public static string GetBiosSerialNumber()
         {
             try
             {
-                if (DiskInfos.Count > 0)
-                {
-                    return DiskInfos;
-                }
-
-                using var mc = new ManagementClass("Win32_DiskDrive");
-                using var moc = mc.GetInstances();
-                foreach (var mo in moc)
+                return _cache.GetOrAdd(nameof(GetBiosSerialNumber), () =>
                 {
-                    using (mo)
+                    using var searcher = new ManagementObjectSearcher("select * from Win32_BIOS");
+                    using var mos = searcher.Get();
+                    foreach (var mo in mos)
                     {
-                        DiskInfos.Add(new DiskInfo()
-                        {
-                            Total = float.Parse(mo["Size"].ToString()),
-                            Model = mo["Model"].ToString(),
-                            SerialNumber = mo["SerialNumber"].ToString(),
-                        });
+                        return mo["SerialNumber"].ToString().Trim();
                     }
-                }
+                    return "";
+                });
 
-                return DiskInfos;
             }
-            catch (Exception)
+            catch (Exception e)
             {
-                return new List<DiskInfo>();
+                Console.WriteLine(e.Message);
             }
+
+            return "";
         }
 
-        #endregion 获取磁盘空间
+        /// <summary>
+        /// 主板编号
+        /// </summary>
+        /// <returns></returns>
+        public static BiosInfo GetBiosInfo()
+        {
+            return _cache.GetOrAdd(nameof(GetBiosInfo), () =>
+            {
+                using var searcher = new ManagementObjectSearcher("select * from Win32_BaseBoard");
+                using var mos = searcher.Get();
+                foreach (var mo in mos)
+                {
+                    return new BiosInfo
+                    {
+                        Manufacturer = mo.GetPropertyValue("Manufacturer").ToString(),
+                        ID = mo["SerialNumber"].ToString(),
+                        Model = mo["Product"].ToString(),
+                        SerialNumber = GetBiosSerialNumber()
+                    };
+                }
+
+                return new BiosInfo();
+            });
+        }
+
+        #endregion
+
+        #region 公共函数
+
+        /// <summary>
+        /// 将速度值格式化成字节单位
+        /// </summary>
+        /// <param name="bytes"></param>
+        /// <returns></returns>
+        public static string FormatBytes(this double bytes)
+        {
+            int unit = 0;
+            while (bytes > 1024)
+            {
+                bytes /= 1024;
+                ++unit;
+            }
+
+            string s = CompactFormat ? ((int)bytes).ToString() : bytes.ToString("F") + " ";
+            return s + (Unit)unit;
+        }
 
         private static float GetCounterValue(PerformanceCounter pc, string categoryName, string counterName, string instanceName)
         {
@@ -680,6 +772,8 @@ namespace Masuit.Tools.Hardware
             return pc.NextValue();
         }
 
+        #endregion 公共函数
+
         #region Win32API声明
 
 #pragma warning disable 1591

+ 1 - 1
Masuit.Tools.Abstractions/Html/HtmlTools.cs

@@ -1,6 +1,6 @@
 using AngleSharp;
 using AngleSharp.Dom;
-using Ganss.XSS;
+using Ganss.Xss;
 using Masuit.Tools.RandomSelector;
 using System;
 using System.Collections.Generic;

+ 3 - 2
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -3,7 +3,7 @@
         <TargetFrameworks>netstandard2.0;netstandard2.1;net461;net5;net6</TargetFrameworks>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>2.5.5.1</Version>
+        <Version>2.5.6</Version>
         <Authors>懒得勤快</Authors>
         <Description>Masuit.Tools基础公共库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。</Description>
         <Copyright>懒得勤快,长空X</Copyright>
@@ -44,7 +44,8 @@
 
     <ItemGroup>
         <PackageReference Include="DnsClient" Version="1.6.1" />
-        <PackageReference Include="HtmlSanitizer" Version="7.1.542" />
+        <PackageReference Include="HtmlSanitizer" Version="8.0.601" />
+        <PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
         <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
         <PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />

+ 1 - 1
Masuit.Tools.AspNetCore/Masuit.Tools.AspNetCore.csproj

@@ -17,7 +17,7 @@
         <Product>Masuit.Tools.AspNetCore</Product>
         <PackageId>Masuit.Tools.AspNetCore</PackageId>
         <LangVersion>latest</LangVersion>
-        <Version>1.1.5.1</Version>
+        <Version>1.1.6</Version>
         <RepositoryType></RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <FileVersion>$(Version)</FileVersion>

+ 6 - 17
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -20,7 +20,7 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType></RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.5.5.1</Version>
+        <Version>2.5.6</Version>
         <FileVersion>$(Version)</FileVersion>
         <Company>masuit.org</Company>
         <AssemblyVersion>$(Version)</AssemblyVersion>
@@ -36,14 +36,14 @@ github:https://github.com/ldqk/Masuit.Tools
 
     <ItemGroup>
         <PackageReference Include="DnsClient" Version="1.6.1" />
-        <PackageReference Include="HtmlSanitizer" Version="7.1.542" />
+        <PackageReference Include="HtmlSanitizer" Version="8.0.601" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
         <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
         <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="6.0.1" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
         <PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />
-        <PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta14" />
+        <PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta15" />
         <PackageReference Include="System.Management" Version="6.0.0" />
         <PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
         <PackageReference Include="SharpCompress" Version="0.32.2" />
@@ -61,20 +61,6 @@ github:https://github.com/ldqk/Masuit.Tools
     <ItemGroup Condition=" '$(TargetFramework)' == 'net6'">
         <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.10" />
     </ItemGroup>
-    <ItemGroup>
-        <Compile Include="..\Masuit.Tools.Abstractions\*\*.cs">
-            <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
-        </Compile>
-        <Compile Include="..\Masuit.Tools.Abstractions\Extensions\*\*.cs">
-            <Link>Extensions\%(RecursiveDir)%(FileName)%(Extension)</Link>
-        </Compile>
-        <Compile Include="..\Masuit.Tools.Abstractions\Files\FileDetector\*.*">
-          <Link>Files\FileDetector\%(RecursiveDir)%(FileName)%(Extension)</Link>
-        </Compile>
-        <Compile Include="..\Masuit.Tools.Abstractions\Files\FileDetector\*\*.*">
-          <Link>Files\FileDetector\%(RecursiveDir)%(FileName)%(Extension)</Link>
-        </Compile>
-    </ItemGroup>
     <ItemGroup>
       <Compile Remove="..\Masuit.Tools.Abstractions\Mapping\**" />
     </ItemGroup>
@@ -96,6 +82,9 @@ github:https://github.com/ldqk/Masuit.Tools
         <PackagePath>\</PackagePath>
       </None>
     </ItemGroup>
+    <ItemGroup>
+      <ProjectReference Include="..\Masuit.Tools.Abstractions\Masuit.Tools.Abstractions.csproj" />
+    </ItemGroup>
 
     <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
         <DocumentationFile></DocumentationFile>

+ 130 - 105
Masuit.Tools.Excel/ExcelExtension.cs

@@ -1,5 +1,7 @@
 using OfficeOpenXml;
 using OfficeOpenXml.Drawing;
+using OfficeOpenXml.Style;
+using OfficeOpenXml.Table;
 using System;
 using System.Collections.Generic;
 using System.Data;
@@ -7,7 +9,6 @@ using System.Drawing;
 using System.IO;
 using System.Linq;
 using System.Text;
-using OfficeOpenXml.Style;
 
 namespace Masuit.Tools.Excel;
 
@@ -116,136 +117,160 @@ public static class ExcelExtension
     /// <param name="startColumn">起始列,默认第一列A列</param>
     public static void FillWorksheet(this ExcelWorksheet sheet, DataTable table, ColumnSettings settings = null, int startRow = 1, int startColumn = 1)
     {
-        // 填充表头
-        var maxWidth = new int[table.Columns.Count];
-        for (var j = 0; j < table.Columns.Count; j++)
-        {
-            sheet.SetValue(startRow, j + startColumn, table.Columns[j].ColumnName);
-            maxWidth[j] = Encoding.UTF8.GetBytes(table.Columns[j].ColumnName).Length;
-        }
-
-        sheet.Row(startRow).Style.Font.Bold = true; // 表头设置为粗体
-        sheet.Row(startRow).Style.Font.Size = sheet.Row(startRow).Style.Font.Size * 1.11f; // 表头字号放大1.11倍
-        sheet.Row(startRow).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
-        sheet.Row(startRow).CustomHeight = true; // 自动调整行高
-        sheet.Cells.AutoFitColumns(); // 表头自适应列宽
-        sheet.Cells.Style.WrapText = true;
-        if (settings != null)
+        var hasPicColumn = false;
+        if (table.Rows.Count > 0)
         {
-            foreach (var x in settings.ColumnTypes)
+            for (int i = 0; i < table.Columns.Count; i++)
             {
-                sheet.Column(x.Key).Style.Numberformat.Format = x.Value;
+                switch (table.Rows[0][i])
+                {
+                    case Stream:
+                    case IEnumerable<Stream>:
+                    case IDictionary<string, Stream>:
+                    case IDictionary<string, MemoryStream>:
+                        hasPicColumn = true;
+                        break;
+                }
             }
         }
 
-        // 填充内容
-        for (var i = 0; i < table.Rows.Count; i++)
+        if (hasPicColumn)
         {
-            sheet.Row(i + startRow + 1).CustomHeight = true; // 自动调整行高
+            // 填充表头
+            var maxWidth = new int[table.Columns.Count];
             for (var j = 0; j < table.Columns.Count; j++)
             {
-                switch (table.Rows[i][j])
+                sheet.SetValue(startRow, j + startColumn, table.Columns[j].ColumnName);
+                maxWidth[j] = Encoding.UTF8.GetBytes(table.Columns[j].ColumnName).Length;
+            }
+
+            sheet.Row(startRow).Style.Font.Bold = true; // 表头设置为粗体
+            sheet.Row(startRow).Style.Font.Size = sheet.Row(startRow).Style.Font.Size * 1.11f; // 表头字号放大1.11倍
+            sheet.Row(startRow).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
+            sheet.Row(startRow).CustomHeight = true; // 自动调整行高
+            if (settings != null)
+            {
+                foreach (var x in settings.ColumnTypes)
                 {
-                    case Stream s:
-                        {
-                            if (s.Length > 2)
-                            {
-                                var pictureType = ImageDetector.GetPictureType(s) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
-                                var bmp = new ExcelImage(s, pictureType).Bounds;
-                                var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), s, pictureType);
-                                picture.SetPosition(i + startRow, 3, j + startColumn - 1, 5); //设置图片显示位置
-                                var percent = Math.Round(Math.Min(12000f / bmp.Height, 100));
-                                picture.SetSize((int)percent);
-                                sheet.Row(i + startRow + 1).Height = 90;
-                                sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, bmp.Width * percent / 400);
-                            }
+                    sheet.Column(x.Key).Style.Numberformat.Format = x.Value;
+                }
+            }
 
-                            sheet.SetValue(i + startRow + 1, j + startColumn, "");
+            // 填充内容
+            for (int i = 0; i < table.Rows.Count; i++)
+            {
+                sheet.Row(i + startRow + 1).CustomHeight = true; // 自动调整行高
+                for (int j = 0; j < table.Columns.Count; j++)
+                {
+                    switch (table.Rows[i][j])
+                    {
+                        case Stream s:
+                            {
+                                if (s.Length > 2)
+                                {
+                                    var pictureType = ImageDetector.GetPictureType(s) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
+                                    var bmp = new ExcelImage(s, pictureType).Bounds;
+                                    var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), s, pictureType);
+                                    picture.SetPosition(i + startRow, 3, j + startColumn - 1, 5); //设置图片显示位置
+                                    var percent = Math.Round(Math.Min(12000f / bmp.Height, 100));
+                                    picture.SetSize((int)percent);
+                                    sheet.Row(i + startRow + 1).Height = 90;
+                                    sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, bmp.Width * percent / 400);
+                                }
 
-                            break;
-                        }
+                                sheet.SetValue(i + startRow + 1, j + startColumn, "");
 
-                    case IEnumerable<Stream> streams:
-                        {
-                            double sumWidth = 0;
-                            foreach (var stream in streams.Where(stream => stream.Length > 2))
-                            {
-                                var pictureType = ImageDetector.GetPictureType(stream) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
-                                var bmp = new ExcelImage(stream, pictureType).Bounds;
-                                var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), stream, pictureType);
-                                picture.SetPosition(i + startRow, 3, j + startColumn - 1, (int)Math.Ceiling(5 + sumWidth)); //设置图片显示位置
-                                var percent = Math.Min(12000f / bmp.Height, 100);
-                                picture.SetSize((int)percent);
-                                sheet.Row(i + startRow + 1).Height = 90;
-                                sumWidth += bmp.Width * percent / 100 + 5;
-                                sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, sumWidth / 5);
+                                break;
                             }
 
-                            sheet.SetValue(i + startRow + 1, j + startColumn, "");
-                            break;
-                        }
-
-                    case IDictionary<string, Stream> dic:
-                        {
-                            double sumWidth = 0;
-                            foreach (var kv in dic.Where(kv => kv.Value.Length > 2))
+                        case IEnumerable<Stream> streams:
                             {
-                                var pictureType = ImageDetector.GetPictureType(kv.Value) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
-                                var bmp = new ExcelImage(kv.Value, pictureType).Bounds;
-                                var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), kv.Value, pictureType, new Uri(kv.Key));
-                                picture.SetPosition(i + startRow, 3, j + startColumn - 1, (int)Math.Ceiling(5 + sumWidth)); //设置图片显示位置
-                                var percent = Math.Min(12000f / bmp.Height, 100);
-                                picture.SetSize((int)percent);
-                                sheet.Row(i + startRow + 1).Height = 90;
-                                sumWidth += bmp.Width * percent / 100 + 5;
-                                sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, sumWidth / 5);
-                            }
+                                double sumWidth = 0;
+                                foreach (var stream in streams.Where(stream => stream.Length > 2))
+                                {
+                                    var pictureType = ImageDetector.GetPictureType(stream) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
+                                    var bmp = new ExcelImage(stream, pictureType).Bounds;
+                                    var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), stream, pictureType);
+                                    picture.SetPosition(i + startRow, 3, j + startColumn - 1, (int)Math.Ceiling(5 + sumWidth)); //设置图片显示位置
+                                    var percent = Math.Min(12000f / bmp.Height, 100);
+                                    picture.SetSize((int)percent);
+                                    sheet.Row(i + startRow + 1).Height = 90;
+                                    sumWidth += bmp.Width * percent / 100 + 5;
+                                    sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, sumWidth / 5);
+                                }
 
-                            sheet.SetValue(i + startRow + 1, j + startColumn, "");
-                            break;
-                        }
+                                sheet.SetValue(i + startRow + 1, j + startColumn, "");
+                                break;
+                            }
 
-                    case IDictionary<string, MemoryStream> dic:
-                        {
-                            double sumWidth = 0;
-                            foreach (var kv in dic.Where(kv => kv.Value.Length > 2))
+                        case IDictionary<string, Stream> dic:
                             {
-                                var pictureType = ImageDetector.GetPictureType(kv.Value) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
-                                var bmp = new ExcelImage(kv.Value, pictureType).Bounds;
-                                var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), kv.Value, pictureType, new Uri(kv.Key));
-                                picture.SetPosition(i + startRow, 3, j + startColumn - 1, (int)Math.Ceiling(5 + sumWidth)); //设置图片显示位置
-                                var percent = Math.Min(12000f / bmp.Height, 100);
-                                picture.SetSize((int)percent);
-                                sheet.Row(i + startRow + 1).Height = 90;
-                                sumWidth += bmp.Width * percent / 100 + 5;
-                                sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, sumWidth / 5);
-                            }
+                                double sumWidth = 0;
+                                foreach (var kv in dic.Where(kv => kv.Value.Length > 2))
+                                {
+                                    var pictureType = ImageDetector.GetPictureType(kv.Value) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
+                                    var bmp = new ExcelImage(kv.Value, pictureType).Bounds;
+                                    var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), kv.Value, pictureType, new Uri(kv.Key));
+                                    picture.SetPosition(i + startRow, 3, j + startColumn - 1, (int)Math.Ceiling(5 + sumWidth)); //设置图片显示位置
+                                    var percent = Math.Min(12000f / bmp.Height, 100);
+                                    picture.SetSize((int)percent);
+                                    sheet.Row(i + startRow + 1).Height = 90;
+                                    sumWidth += bmp.Width * percent / 100 + 5;
+                                    sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, sumWidth / 5);
+                                }
 
-                            sheet.SetValue(i + startRow + 1, j + startColumn, "");
-                            break;
-                        }
+                                sheet.SetValue(i + startRow + 1, j + startColumn, "");
+                                break;
+                            }
 
-                    default:
-                        {
-                            sheet.SetValue(i + startRow + 1, j + startColumn, table.Rows[i][j] ?? "");
-                            if (table.Rows[i][j] is ValueType)
+                        case IDictionary<string, MemoryStream> dic:
                             {
-                                sheet.Column(j + startColumn).AutoFit();
+                                double sumWidth = 0;
+                                foreach (var kv in dic.Where(kv => kv.Value.Length > 2))
+                                {
+                                    var pictureType = ImageDetector.GetPictureType(kv.Value) ?? throw new ArgumentException($"{i}行{j}列图像格式不受支持");
+                                    var bmp = new ExcelImage(kv.Value, pictureType).Bounds;
+                                    var picture = sheet.Drawings.AddPicture(Guid.NewGuid().ToString(), kv.Value, pictureType, new Uri(kv.Key));
+                                    picture.SetPosition(i + startRow, 3, j + startColumn - 1, (int)Math.Ceiling(5 + sumWidth)); //设置图片显示位置
+                                    var percent = Math.Min(12000f / bmp.Height, 100);
+                                    picture.SetSize((int)percent);
+                                    sheet.Row(i + startRow + 1).Height = 90;
+                                    sumWidth += bmp.Width * percent / 100 + 5;
+                                    sheet.Column(j + startColumn).Width = Math.Max(sheet.Column(j + startColumn).Width, sumWidth / 5);
+                                }
+
+                                sheet.SetValue(i + startRow + 1, j + startColumn, "");
+                                break;
                             }
-                            else
+
+                        default:
                             {
-                                // 根据单元格内容长度来自适应调整列宽
-                                using var bitmap = new Bitmap(1, 1);
-                                using var graphics = Graphics.FromImage(bitmap);
-                                using var font = new Font(sheet.Cells[i + startRow + 1, j + startColumn].Style.Font.Name, 1.66f);
-                                var measureText = graphics.MeasureString(table.Rows[i][j].ToString(), font);
-                                sheet.Column(j + startColumn).Width = Math.Min(110, Math.Max(measureText.Width, sheet.Column(j + startColumn).Width));
-                            }
+                                sheet.SetValue(i + startRow + 1, j + startColumn, table.Rows[i][j] ?? "");
+                                if (table.Rows[i][j] is ValueType)
+                                {
+                                    sheet.Column(j + startColumn).AutoFit();
+                                }
+                                else
+                                {
+                                    // 根据单元格内容长度来自适应调整列宽
+                                    using var bitmap = new Bitmap(1, 1);
+                                    using var graphics = Graphics.FromImage(bitmap);
+                                    using var font = new Font(sheet.Cells[i + startRow + 1, j + startColumn].Style.Font.Name, 1.66f);
+                                    var measureText = graphics.MeasureString(table.Rows[i][j].ToString(), font);
+                                    sheet.Column(j + startColumn).Width = Math.Min(110, Math.Max(measureText.Width, sheet.Column(j + startColumn).Width));
+                                }
 
-                            break;
-                        }
+                                break;
+                            }
+                    }
                 }
             }
+            sheet.Cells.AutoFitColumns(); // 表头自适应列宽
+            sheet.Cells.Style.WrapText = true;
+        }
+        else
+        {
+            sheet.Cells[startRow, startColumn].LoadFromDataTable(table, true, TableStyles.Light1).AutoFitColumns();
         }
     }
 

+ 6 - 3
Masuit.Tools.Excel/Masuit.Tools.Excel.csproj

@@ -3,7 +3,7 @@
         <TargetFrameworks>netstandard2.0;netstandard2.1;net461;net5;net6</TargetFrameworks>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>1.2.2</Version>
+        <Version>1.2.3-beta</Version>
         <Authors>懒得勤快</Authors>
         <Description>Masuit.Tools.Excel导出库,支持一些简单数据的导出,支持图片列</Description>
         <Copyright>懒得勤快</Copyright>
@@ -16,9 +16,9 @@
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-        <FileVersion>1.0.9</FileVersion>
+        <FileVersion>1.2.3</FileVersion>
         <Company>masuit.org</Company>
-        <AssemblyVersion>1.0.9</AssemblyVersion>
+        <AssemblyVersion>1.2.3</AssemblyVersion>
         <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
         <IncludeSymbols>true</IncludeSymbols>
@@ -33,5 +33,8 @@
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
         <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     </ItemGroup>
+    <ItemGroup>
+      <ProjectReference Include="..\Masuit.Tools.Abstractions\Masuit.Tools.Abstractions.csproj" />
+    </ItemGroup>
 
 </Project>

+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -2,7 +2,7 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net45</id>
-    <version>2.5.5.1</version>
+    <version>2.5.6</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>

+ 1 - 1
Masuit.Tools.NoSQL.MongoDBClient/Masuit.Tools.NoSQL.MongoDBClient.csproj

@@ -38,7 +38,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="MongoDB.Driver" Version="2.17.1" />
+    <PackageReference Include="MongoDB.Driver" Version="2.18.0" />
   </ItemGroup>
 
 </Project>

+ 3 - 2
Masuit.Tools/Masuit.Tools.csproj

@@ -159,6 +159,7 @@
     <None Include="package.nuspec" />
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="Microsoft.CSharp" />
     <Reference Include="System" />
     <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Configuration" />
@@ -176,7 +177,7 @@
       <Version>1.6.1</Version>
     </PackageReference>
     <PackageReference Include="HtmlSanitizer">
-      <Version>7.1.542</Version>
+      <Version>8.0.601</Version>
     </PackageReference>
     <PackageReference Include="Microsoft.AspNet.Mvc">
       <Version>5.2.9</Version>
@@ -194,7 +195,7 @@
       <Version>1.0.0-beta14</Version>
     </PackageReference>
     <PackageReference Include="StackExchange.Redis">
-      <Version>2.6.66</Version>
+      <Version>2.6.70</Version>
     </PackageReference>
     <PackageReference Include="System.ValueTuple">
       <Version>4.5.0</Version>

+ 2 - 3
Masuit.Tools/Net/WebExtension.cs

@@ -1,6 +1,5 @@
 using Masuit.Tools.Logging;
 using Masuit.Tools.NoSQL;
-using Masuit.Tools.Security;
 using System;
 using System.Linq;
 using System.Runtime.Remoting.Messaging;
@@ -76,7 +75,7 @@ namespace Masuit.Tools.Net
             var sessionKey = HttpContext.Current.Request.Cookies["SessionID"]?.Value;
             if (string.IsNullOrEmpty(sessionKey))
             {
-                sessionKey = Guid.NewGuid().ToString().AESEncrypt();
+                sessionKey = Guid.NewGuid().ToString();
                 HttpCookie cookie = new HttpCookie("SessionID", sessionKey);
                 HttpContext.Current.Response.Cookies.Add(cookie);
             }
@@ -119,7 +118,7 @@ namespace Masuit.Tools.Net
             var sessionKey = HttpContext.Current.Request.Cookies["SessionID"]?.Value;
             if (string.IsNullOrEmpty(sessionKey))
             {
-                sessionKey = Guid.NewGuid().ToString().AESEncrypt();
+                sessionKey = Guid.NewGuid().ToString();
                 var cookie = new HttpCookie("SessionID", sessionKey);
                 HttpContext.Current.Response.Cookies.Add(cookie);
             }

+ 1 - 1
Masuit.Tools/package.nuspec

@@ -2,7 +2,7 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net</id>
-    <version>2.5.5.1</version>
+    <version>2.5.6</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>

+ 1 - 0
NetCoreTest/NetCoreTest.csproj

@@ -15,6 +15,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\Masuit.Tools.AspNetCore\Masuit.Tools.AspNetCore.csproj" />
+    <ProjectReference Include="..\Masuit.Tools.Excel\Masuit.Tools.Excel.csproj" />
   </ItemGroup>
 
 </Project>

+ 1 - 1
Test/Masuit.Tools.Core.Test/Masuit.Tools.Core.Test.csproj

@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="6.0.9" />
+    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="6.0.10" />
     <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
     <PackageReference Include="xunit" Version="2.4.2" />